Instantly share code, notes, and snippets.
philgruneich/UpdatePinboardTags.py
Last active Jul 14, 2020
UpdatePinboardTags
#coding: utf-8 | |
import console | |
import keychain | |
import pickle | |
login = keychain.get_password('pinboard.in','pythonista') | |
if login is not None: | |
user, pw = pickle.loads(login) | |
else: | |
user, pw = console.login_alert('Pinboard Login', '') | |
login = pickle.dumps((user, pw)) | |
keychain.set_password('pinboard.in', 'pythonista', login) | |
import requests | |
import json | |
pinboard_url = 'https://api.pinboard.in/v1/tags/get?format=json' | |
r = requests.get(pinboard_url, auth=(user, pw)) | |
data = json.loads(r.text) | |
tags = data.items() | |
# minTags is the minimum amount of times this tag must link to a bookmark to be part of our final list. | |
# Change the value to 1 to grab all tags, for example. | |
minTags = 10 | |
# This will generate a list without tags with less than minTags bookmarks. | |
filteredTags = [(str(k).lower(),int(v)) for k,v in tags if int(v) >= minTags] | |
# Change to True to sort your tags by name, otherwise they'll be sorted by count | |
sortByName = False | |
from operator import itemgetter | |
if sortByName: | |
filteredTags = sorted(filteredTags, key=itemgetter(0)) | |
else: | |
filteredTags = sorted(filteredTags, key=itemgetter(1), reverse=True) | |
# finalTags kicks the conversion to a Launch Center Pro [list] converting each tag into tag=t:tag so we can use them to call Pinswift later. | |
finalTags = '|'.join([k for k,v in filteredTags]) | |
title = 'Pick a Tag!' | |
label = 'Pick a Tag!' | |
description = 'Outcome for our Pythonista script to create a list with our most used tags from Pinboard ready to trigger at Pinswift' | |
# Comment the next line if you're not using Pinswift | |
action = 'pinswift:///u:%s/t:[list:%s|%s]' % (user, label, finalTags) | |
# Uncomment the next line if you're using Pushpin | |
#action = 'pushpin://feed?user=%s&tags=[list:%s|%s]' % (user, label, finalTags) | |
from urllib import quote | |
import webbrowser | |
import_lcp = 'launch://import?url=%s&title=%s&description=%s' % (quote(action), quote(title), quote(description)) | |
webbrowser.open(import_lcp) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment