diff --git a/plugins/open_graph.py b/plugins/open_graph.py
index 510de33..878ef34 100644
--- a/plugins/open_graph.py
+++ b/plugins/open_graph.py
@@ -1,6 +1,9 @@
+from pelican import signals
+from .links import accounts
import os.path
-from pelican import signals
+
+ACCOUNTS = accounts()
def map_og_tag(instance, prop, og_tag, default=''):
@@ -13,6 +16,46 @@ def map_og_tag(instance, prop, og_tag, default=''):
def get_content_type(instance):
return type(instance).__name__
+def get_twiter_tags(instance):
+ return {
+ "twitter:card": "summary_large_image",
+ "twitter:site": ACCOUNTS["twitter"].username,
+ "twitter:title": instance.metadata.get("title"),
+ "twitter:description": instance.metadata.get("summary"),
+ "twitter:creator": ACCOUNTS["twitter"].username,
+ "twitter:image": instance.metadata.get('image'),
+ "twitter:image:alt": instance.metadata.get("summary"),
+ "twitter:url": os.path.join(instance.settings.get("SITEURL", ""), instance.url)
+ }
+
+def get_og_tags(instance):
+ return {
+ "og:title": instance.metadata.get("title"),
+ "og:type": get_content_type(instance).lower(),
+ "og:url": os.path.join(instance.settings.get("SITEURL"), instance.url),
+ "og:image": instance.metadata.get("image"),
+ "og:description": instance.metadata.get("description"),
+ "og:site_name": instance.settings.get("SITENAME"),
+ "og:locale": instance.metadata.get("locale", "en_GB")
+ }
+
+def get_schema_tags(instance):
+ return {
+ "name": instance.metadata.get("title"),
+ "description": instance.metadata.get("description"),
+ "image": instance.metadata.get("image")
+ }
+
+def get_general_tags(instance):
+ return {
+ "article:author": instance.settings.get("AUTHOR"),
+ "article:modified_time": instance.metadata.get("modified"),
+ "article:published_time": instance.metadata.get("date"),
+ "article:section": instance.category.name if hasattr(instance, "category") else ""
+ "description": instance.metadata.get("description"),
+ "author": instance.metadata.get("author", instance.settings.get("AUTHOR")),
+ "canonical": instance.gettings.get("SITEURL")
+ }
def tag_item(instance):
instance_type = get_content_type(instance)
@@ -20,38 +63,34 @@ def tag_item(instance):
if instance_type not in ['Article', 'Page', 'Draft']:
return
- instance.ogtags = [
- ('og:type', instance_type),
- ('og:url', os.path.join(instance.settings.get('SITEURL', ''), instance.url)),
- ('twitter:url', os.path.join(instance.settings.get('SITEURL', ''), instance.url)),
- ('twitter:card', 'summary'),
- ('og:site_name', instance.settings.get('SITENAME', '')),
- ]
+ metatags = []
- instance = map_og_tag(instance, 'title', 'og:title')
- instance = map_og_tag(instance, 'image', 'og:image')
- instance = map_og_tag(instance, 'summary', 'og:description')
- instance = map_og_tag(instance, 'author', 'article:author', instance.settings.get('AUTHOR'))
- instance = map_og_tag(instance, 'modified', 'article:modified_time')
- instance = map_og_tag(instance, 'date', 'article:published_time')
+ for tag, value in get_twiter_tags(instance).items():
+ metatags.append(
+ "".format(tag, value)
+ )
- instance = map_og_tag(instance, 'image', 'twitter:image')
- instance = map_og_tag(instance, 'title', 'twitter:title')
- instance = map_og_tag(instance, 'summary', 'twitter:description')
+ for tag, value in get_og_tags(instance).items():
+ metatags.append(
+ "".format(tag, value)
+ )
- if hasattr(instance, 'category'):
- instance.ogtags.append(('article:section', instance.category.name))
+ for tag, value in get_schema_tags(instance).items():
+ metatags.append(
+ "".format(tag, value)
+ )
+ general_tags = get_general_tags(instance).items()
if hasattr(instance, 'tags'):
for tag in instance.tags:
- instance.ogtags.append(('article:tag', tag.name))
+ general_tags.append(('article:tag', tag.name))
- instance.ogtags.append(('og:locale', instance.metadata.get('locale', 'en_GB')))
+ for tag, value in general_tags:
+ metatags.append(
+ "".format(tag, value)
+ )
- # Add non-og tags
- instance = map_og_tag(instance, 'summary', 'description')
- instance = map_og_tag(instance, 'author', 'author', instance.settings.get('AUTHOR'))
- instance.ogtags.append(('canonical', instance.settings.get('SITEURL')))
+ instance.metatags = metatags
def register():