Skip to content

Instantly share code, notes, and snippets.

@jhofman
Created January 16, 2014 17:05
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save jhofman/8458885 to your computer and use it in GitHub Desktop.
Save jhofman/8458885 to your computer and use it in GitHub Desktop.
mirrors starred github repositories to delicious
#!/usr/bin/env python
#
# file: bookmark_starred.py
#
# description: mirrors starred github repos to delicious
#
# usage: bookmark_starred.py GITHUB_USER DELICIOUS_USER
#
# requirements: requests
import sys
import requests
from getpass import getpass
from urlparse import urlparse, parse_qs
import logging
PER_PAGE=100
# set up logging
logging.basicConfig(level=logging.INFO,
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s")
logger = logging.getLogger(sys.argv[0])
# log only warnings from the requests library
requests_log = logging.getLogger("requests")
requests_log.setLevel(logging.WARNING)
if __name__=='__main__':
if (len(sys.argv) < 3):
logger.info('usage: %s GITHUB_USER DELICIOUS_USER' % sys.argv[0])
sys.exit(1)
github_user, delicious_user = sys.argv[1], sys.argv[2]
# get delicious password
delicious_pass = getpass('delicious password: ')
##########################
# get starred github repos
##########################
# determine total number of pages
starred_url = 'https://api.github.com/users/%s/starred' % github_user
r = requests.head(starred_url, params={'per_page': PER_PAGE})
query_string = urlparse(r.links['last']['url']).query
last_page = int(parse_qs(query_string)['page'][0])
# loop over pages
starred_repos = []
for page in xrange(1, last_page+1):
logger.info("fetching github page %d of %d" % (page, last_page))
params = {'page': page, 'per_page': PER_PAGE}
r = requests.get(starred_url, params=params)
starred_repos += r.json()
logger.info("fetched %d starred repos from github" % len(starred_repos))
#############################
# bookmark repos on delicious
#############################
s = requests.Session()
s.auth = (delicious_user, delicious_pass)
# loop over repos
bookmark_url = 'https://delicious.com/v1/posts/add'
for i, repo in enumerate(starred_repos):
logger.info("bookmarking %s on delicious (%d of %d)" % (repo['full_name'], i+1, len(starred_repos)))
tags = ['github_starred','open_source']
if repo['language']:
tags.append(repo['language'].lower())
tags = ",".join(tags)
params = {'description': repo['full_name'],
'url': repo['html_url'],
'tags': tags,
'extended': repo['description']}
r = s.get(bookmark_url, params=params)
if r.status_code != requests.codes.ok:
logger.info('error posting bookmark')
sys.exit(1)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment