Add plugin to add share URLs to article
This commit is contained in:
65
share_post/README.md
Normal file
65
share_post/README.md
Normal 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
1
share_post/__init__.py
Normal file
@@ -0,0 +1 @@
|
|||||||
|
from .share_post import *
|
||||||
58
share_post/share_post.py
Normal file
58
share_post/share_post.py
Normal 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)
|
||||||
Reference in New Issue
Block a user