Skip to content

Instantly share code, notes, and snippets.

@Ashwinning Ashwinning/ Secret
Last active Nov 3, 2016

What would you like to do?
My script to sync gists to wordpress.
#Requirements for github
import requests
import json
#Requirements for python-wordpress-xmlrpc
from wordpress_xmlrpc import Client, WordPressPost
from wordpress_xmlrpc.methods.posts import GetPosts, NewPost
from wordpress_xmlrpc.methods import taxonomies
from wordpress_xmlrpc.compat import xmlrpc_client
import datetime, xmlrpclib
Accepts a list of strings
If a 'gistblog' string exists in the list, returns true
Else returns false
def GistBlogExists(tags):
if 'gistblog' in str(tags):
return True
return False
Removes the gistblog hashtag from a list
and returns the remaining hashtags
def RemoveGistBlog(tags):
return tags;
Accepts a string
Extracts all hashtags out of that string into a list
Returns a list of all the hashtags
def GetTags(description):
#Get all the tags in the description
tags = []
for tag in description.split():
if tag.startswith("#"):
#Check if the gistblog tag exists and return
return tags
The GistPost Class.
class GistPost:
def __init__(self, title, url, tags, created_at):
self.title = title
self.url = url
self.tags = tags
self.created_at = created_at
Converts Time strings from the kind returned by the Gist API
to the kind that Wordpress/XMLRPC likes.
def TimeSanitizer(str):
#Replace T with a space
value = str.replace("T", " ")
#Remove the Z
value = value.replace("Z", "")
#Remove last three characters
value = value[:-4]
return value
Removes tags and leading/trailing whitespaces.
def SanitizeDescription(description):
sanitized = description
for tag in description.split():
if tag.startswith("#"):
sanitized = sanitized.replace(tag, "")
#Remove trailing whitespaces
sanitized = sanitized.rstrip()
return sanitized
A list of all the tagged gists
gistBlogs = []
A list of all the Wordpress Posts
wordpressPosts = []
Create the Wordpress Client which will retrieve and post posts
wp = Client('', USERNAME, PASSWORD)
Get all Wordpress posts (in batches of 20) from the Hacks category
And add all the titles to the wordpressPosts list.
wpOffset = 0
wpIncrement = 20
while True:
posts ={'number': wpIncrement, 'offset': wpOffset}))
if len(posts) == 0:
print ('Imported ' + str(len(wordpressPosts)) + ' Wordpress posts.')
break # no more posts returned
for post in posts:
#if it's in the hacks category, add it to the list
if 'Hacks' in str(post.terms):
wpOffset = wpOffset + wpIncrement
Get all Gists (in batches of 20)
And add all the gists with #gistblog to the gistBlogs list.
page = 1
offset = 0
increment = 20
while True:
#Make HTTP request to GitHub API
r = requests.get(''+str(page)+'&per_page='+str(increment))
response = r.json()
if str(response) == '[]':
print('Imported ' + str(len(gistBlogs)) + ' Gists.')
break # no more posts returned
for item in response:
description = item['description']
tags = GetTags(description)
#if it's got the gistblog hashtag, add it to the list
if GistBlogExists(tags):
#Save the description as the title
gistPost = GistPost(description, item['html_url'], RemoveGistBlog(tags), item['created_at'])
offset = offset + increment
page += 1
Remove all gistBlogs from list which already exist
in wordpressPosts
for wordpressPost in wordpressPosts:
for gistBlog in gistBlogs:
if wordpressPost.title in gistBlog.title:
#Remove this gistblog
break #Move to next wordpressPost
Display the number of gists to be posted
print ('Posting ' + str(len(gistBlogs)) + ' new gists.')
Post remaining gistBlogs to Wordpress
gistsPosted = 0
for gistBlog in gistBlogs:
post = WordPressPost()
titleToPost = SanitizeDescription(gistBlog.title)
post.title = titleToPost
post.content = gistBlog.url
post.terms_names = {
'post_tag': gistBlog.tags,
'category': ['hacks'],
post.post_status = 'publish'
timestamp = TimeSanitizer(gistBlog.created_at) = datetime.datetime.strptime(timestamp, "%Y-%m-%d %H:%M") =
gistsPosted += 1
print (str(gistsPosted) + ') ' + titleToPost + ' posted.')
print ('COMPLETE! ' + str(gistsPosted) + ' new gists posted.')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.