Created
January 16, 2014 17:05
-
-
Save jhofman/8458885 to your computer and use it in GitHub Desktop.
mirrors starred github repositories to delicious
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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