Doge log

Abby CTO 雑賀 力王のオフィシャルサイトです

Twistedで☆をつけまくる

何かと話題のはてなスターにTwistedでアクセス。

star.py
# coding=utf-8

from twisted.internet import reactor
from twisted.application.internet import TimerService
from twisted.web import client
from urllib import urlencode
import re

CONST_LOGIN = 'https://www.hatena.ne.jp/login'
CONST_ADD_STAR = 'http://s.hatena.ne.jp/star.add.json?%s'
const_title_re = re.compile(r'<title>([^<]*) - ([^<]*)</title>', re.M | re.I)

dummy_cookie = {}

def add_hatena_star(user, password, url):
    
    def error(failure):
        print failure
        reactor.stop()

    def finish(data):
        print data

    def login(data):
        client.getPage(url, cookies=dummy_cookie).addCallback(add_star)

    def add_star(data):
        match_title = const_title_re.search(data)
        title = match_title.groups(0)
        title_str = unicode(title[1],'euc_jp').strip()
        title_str = title_str.encode('utf8')
        data = urlencode({
            'uri':url,
            'title':title_str,
            'callback':'Ten.JSONP.callback'
        })
        star_url = CONST_ADD_STAR % data 
        client.getPage(star_url, cookies=dummy_cookie).addCallback(finish)
    
    post = urlencode({
        'name':user,
        'password':password,
        'persistent':'1',
        'location':'http://s.hatena.ne.jp/'
        })
    client.getPage(CONST_LOGIN, method='POST', cookies=dummy_cookie, postdata=post).addCallback(login)

if __name__ == '__main__':
    service = TimerService(30, add_hatena_star, 'hatena_id','password', '☆をつけるURL')
    reactor.callLater(1, service.startService)
    reactor.run()

30秒間隔で☆をつけに行きます。
タイトルはふつーにタイトルからひいてます。
(jsだとなんかリンクされてるところで切れるので)
ご利用は計画的に。
(怒られない程度にね!)
うくく。