Старый вариант репостинга в твиттер из RSS давно не работает.
Снова понадобилась такая штука, сделал новый вариант репостинга через oauth.
Используются модули oauth-python-twitter2 и python-bitly.
Все предельно просто, настройка заключается в заполнении значений переменных
bit_api=""
bit_login=""
consumer_key=""
consumer_secret=""
access_key=""
access_secret=""
rss_url="/rss"
После чего запуск скрипта в cron в соотвествии с требованиями по скорости постинга. Можно в принципе и в CMS встроить, чтобы постинг мгновенный был.
Сам код:
#!/usr/local/bin/python
# -*- coding: utf8 -*-
import urllib, libxml2, pickle, os
from time import sleep
from oauthtwitter import OAuthApi
import bitly
bit_api=""
bit_login=""
consumer_key=""
consumer_secret=""
access_key=""
access_secret=""
rss_url="/rss"
if __name__ == '__main__':
doc = libxml2.parseFile(rss_url)
links=[]
for item in doc.xpathEval('//channel/item/link'):
links.append(item.content)
titles=[]
for item in doc.xpathEval('//channel/item/title'):
titles.append(item.content)
rss_path = os.path.join(os.path.dirname(__file__), 'rss.db')
file = open (rss_path)
old_links=pickle.load(file)
file.close()
items=[]
f= 0
for x in xrange( 0,len(links)):
for old in old_links:
f= 0
if (old==links[x]):
f=1
break
if (f== 0):
items.append(x)
twitter = OAuthApi(consumer_key, consumer_secret, access_key, access_secret)
bitly_api = bitly.Api(bit_login, bit_api)
for x in items:
title=titles[x].decode("utf8")
if len(title)<=120:
print "link %s: %s" % (x,links[x])
if x!= 0:
sleep(15)
try:
twitter.UpdateStatus(title+" "+bitly_api.shorten(links[x]))
#print title.encode("utf8")+" "+bitly_api.shorten(links[x])
except ValueError:
pass
file=open(rss_path,"w")
ser=pickle.dump(links,file)
file.close()
Критика, как обычно, приветствуется.