Add plugin to add share URLs to article

This commit is contained in:
Talha Mansoor
2014-01-20 23:21:56 +05:00
parent 8f69faa77c
commit 9a9f9bdb83
3 changed files with 124 additions and 0 deletions

65
share_post/README.md Normal file
View File

@@ -0,0 +1,65 @@
Share Post
==========
A Pelican plugin to create share URLs of article
Copyright (c) Talha Mansoor
Author | Talha Mansoor
----------------|-----
Author Email | talha131@gmail.com
Author Homepage | http://onCrashReboot.com
Github Account | https://github.com/talha131
Why do you need it?
===================
Almost all website have share widgets to let readers share posts on social
networks. Most of these widgets are used by vendors for online tracking. These
widgets are also visual which quite often become a distraction and negatively
affect readers attention.
`share_post` creates old school URLs for some popular sites which your theme
can use. These links do not have the ability to track the users. They can also
be unobtrusive depending on how Pelican theme uses them.
Requirements
============
`share_post` requires BeautifulSoup
```bash
pip install beautifulsoup4
```
How to Use
==========
`share_post` adds a dictionary attribute to `article` which can be accessed via
`article.share_post`. Keys of the dictionary are as follows,
1. `facebook`
1. `google-plus`
1. `email`
1. `twitter`
Template Example
================
```python
{% if article.share_post and article.status != 'draft' %}
<section>
<p id="post-share-links">
Share on:
<a href="{{article.share_post['twitter']}}" target="_blank" title="Share on Twitter">Twitter</a>
<a href="{{article.share_post['facebook']}}" target="_blank" title="Share on Facebook">Facebook</a>
<a href="{{article.share_post['google-plus']}}" target="_blank" title="Share on Google Plus">Google+</a>
<a href="{{article.share_post['email']}}" target="_blank" title="Share via Email">Email</a>
</p>
</section>
{% endif %}
```

1
share_post/__init__.py Normal file
View File

@@ -0,0 +1 @@
from .share_post import *

58
share_post/share_post.py Normal file
View File

@@ -0,0 +1,58 @@
"""
Share Post
==========
This plugin adds share URL to article. These links are textual which means no
online tracking of your readers.
"""
from bs4 import BeautifulSoup
try:
from urllib.parse import quote
except ImportError:
from urllib import quote
from pelican import signals, contents
def article_title(content):
main_title = BeautifulSoup(content.title, 'html.parser').prettify().strip()
sub_title = ''
if hasattr(content, 'subtitle'):
sub_title = BeautifulSoup(content.subtitle, 'html.parser').prettify().strip()
return quote(('%s %s' % (main_title, sub_title)).encode('utf-8'))
def article_url(content):
site_url = content.settings['SITEURL']
return quote(('%s/%s' % (site_url, content.url)).encode('utf-8'))
def article_summary(content):
return quote(content.summary.encode('utf-8'))
def share_post(content):
if isinstance(content, contents.Static):
return
title = article_title(content)
url = article_url(content)
summary = article_summary(content)
tweet = '%s %s' % (title, url)
facebook_link = 'http://www.facebook.com/sharer/sharer.php?s=100' \
'&p[url]=%s&p[images][0]=&p[title]=%s&p[summary]=%s' \
% (url, title, summary)
gplus_link = 'https://plus.google.com/share?url=%s' % url
twitter_link = 'http://twitter.com/home?status=%s' % tweet
mail_link = 'mailto:?subject=%s&body=%s' % (title, url)
share_links = {'twitter': twitter_link,
'facebook': facebook_link,
'google-plus': gplus_link,
'email': mail_link
}
content.share_post = share_links
def register():
signals.content_object_init.connect(share_post)