Python: RSS to Twitter (oauth версия)

11 марта 2012

Старый вариант репостинга в твиттер из 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()

Критика, как обычно, приветствуется.

Опубликовал:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *