export google reader shared posts
благодаря open google reader интерфейс google reader для меня не изменился, и возможность рекомендовать записи у меня тоже осталась. Однако комментариев в ридере скоро не станет совсем, даже приходящих из базза, поэтому хочется на всякий случай забрать из него всё своё. К счастью гугл старается быть хорошим и даёт возможность экспорта данных (Настройки → Импорт/экспорт). К несчастью, у активных пользователей вроде меня нередко скачиваются только данные за короткий период.
к счастью, гугл давно старается быть хорошим, поэтому он дал нам многостраничный atom feed. Вот страничка с моими рекомендациями и бесконечной промоткой назад при помощи параметра ?c=
в адресе, а вот поток моих рекомендаций, в котором нет прямой ссылки на «предыдущую страницу», зато есть тег gr:continuation
. Если его содержимое подставить в адрес потока как параметр ?c=
, то результатом будут предыдущие 20 рекомендаций.
а вот простой скрипт на питоне, в который достаточно подставить id
из адреса своего потока рекомендаций, и он скачает всю историю этого потока, что я с радостью и сделал для себя:
id = '10202714043885511706'
import os, urllib, xml.dom.minidom as dom
def get(continuation):
url2 = url + continuation
print url2
text = ''.join(urllib.urlopen(url2))
atom = dom.parseString(text)
continuation = atom.getElementsByTagName('gr:continuation')
continuation = continuation[0].firstChild.nodeValue
date = atom.getElementsByTagName('updated')
date = date[0].firstChild.nodeValue
folder = date[:7]
if not os.path.exists(folder): os.mkdir(folder)
f = open(os.path.join(folder, date), 'w')
f.write(text)
f.close()
return continuation
url = ('http://www.google.com/reader/public/atom/user%%2F' +\
'%s%%2Fstate%%2Fcom.google%%2Fbroadcast?c=') % id
continuation = ''
while True: continuation = get(continuation)
в качестве дополнительного бонуса у меня теперь заработает нормальный поиск по своим же рекомендациям : )