Hatena::ブログ(Diary)

Djangoへの片思い日記 RSSフィード

2009-10-06

except でエラーを指定しなかった時にどんなエラーが発生したか見る

try:
    hogehoge()
except:
    print sys.exc_info()[0]

って書こうとしてたら

id:nishiohirokazu 先生

exceptionType, exceptionValue, exceptionTraceback = sys.exc_info()

ってやるといいよ

[0]は1年後に困る羽目になるから


と教えていただいた!!!


1年後の自分が「なんじゃこりゃ」って言うという意味

絶対言う、僕なら間違いなく言う。

あと「0番目が何なのかドキュメント見て調べるのめんどい」ともいいそう


すいませんでした><

僕も言うと思うので書き直します!!!

2009-06-29

twitter で 60 日以上発言が無い人を remove する

いつのまにやら Twitter に Follow 制限とか出来て

色々な人の発言が見たいのに Follow 追加出来なくなって

コンピュータの癖に人間様の処理能力に制限かけるんじゃねーよと

お怒りのみなさまこんにちは


オープンソースバザールモデルの御祭に参加出来なくてさみしい僕ですが、

みなさんいかがおすごしですか?


そんなこんなで Twitter にむかついても

サポートに連絡しても制限解除するつもりはネーYO!!」

と言われてしまいますし、

かといってむかついたままなのも精神衛生上良くないので

60 日以上発言の無いユーザを remove するスクリプト書きますた


pit と simplejson が入ってれば動くはずですwwww


#!/usr/bin/env python
# -*- coding: utf-8 -*-

import sys, simplejson, urllib2, urllib
from pit import Pit

class TwitterClone(object):
    def __init__(self, user, passwd,url):
        self.user = user
        self.passwd = passwd
        self.url = url

    def post(self, text):
        text = text.encode('utf-8')
        self.getOpener().open(self.url + 'statuses/update.json',
                              urllib.urlencode({'status':text}))
        
    def destroyFriend(self,id):
        url = self.url + ('friendships/destroy/%s.json' % id)
        r = self.getOpener().open(url,{})
        data = simplejson.loads(r.read())
        return data

    def getTimeline(self):
        url = self.url + 'statuses/friends_timeline.json'
        r = self.getOpener().open(url)
        data = simplejson.loads(r.read())
        return data

    def getReplies(self):
        url = self.url + 'statuses/replies.json'
        r = self.getOpener().open(url)
        data = simplejson.loads(r.read())
        return data

    def getFriends(self,page=1):
        url = self.url + 'statuses/friends.json?' + urllib.urlencode({'page':page})
        r = self.getOpener().open(url)
        data = simplejson.loads(r.read())
        return data

    def getOpener(self):
        passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
        passman.add_password(None, self.url , self.user, self.passwd)
        authhandler = urllib2.HTTPBasicAuthHandler(passman)
        opener = urllib2.build_opener(authhandler)
        opener.addheaders = [('User-agent',
                              'TwitterCloneClient(http://d.hatena.ne.jp/jYoshiori/)')]
        return opener

if __name__ == '__main__':
    twitter_config = Pit.get('twitter.com',{'require' : {
        'user' : 'Your twitter name',
        'password' : 'Your twitter password'
        }})
    twitter = TwitterClone(twitter_config['user'],
                           twitter_config['password'],
                           'http://twitter.com/')
    import rfc822
    from datetime import datetime, timedelta
    from time import sleep

    lastMonth = datetime.now() - timedelta(days=60)
    wait = 45
    removeCount = 0
    print 'start'
    for index in range(1,1000):
        print 'page ' + str(index)
        friends = twitter.getFriends(index)
        if 0 == len(friends):
            break
        for user in friends:
            if user.has_key('status'):
                date = datetime(*rfc822.parsedate(user['status']['created_at'])[:7])
                if lastMonth > date:
                    print '%s is remov. last update %s' % (user['screen_name'],date)
                    twitter.destroyFriend(user['id'])
                    removeCount += removeCount
                    sleep(wait)
            else :
                print '%s is remov.' % user['screen_name']
                twitter.destroyFriend(user['id'])
                removeCount += removeCount
                sleep(wait)

        sleep(wait)
    print 'finish!!. %s remove' % str(removeCount) 

これまたむかつく API 制限に引っかからないように

sleep を 45秒 入れてますので、寝るまえにでも起動しておけば朝には終ってると思います。


ちなみに僕は

4800人くらい → 3286人

になりました。

コアリズムより効果大です!!

※ 効果は個人によって差があります。

2009-03-27

super() での疑問

----------

解決 :mechanize.Browser が object継承しない古いタイプクラスだったみたい

----------

これは OK

>>> class Foo(object):
    def __init__(self,text):
        super(Foo,self).__init__(self)
... 
>>> foo = Foo('test')

で、mechanize.Browser 継承して親のコンストラクタ呼ぼうとしたら

>>> import mechanize
>>> class MyBrowser(mechanize.Browser):
...     def __init__(self,userid,passwd):
...         super(MyBrowser,self).__init__(self)
... 
>>> foo = MyBrowser('test','test')
------------------------------------------------------------
Traceback (most recent call last):
  File "<ipython console>", line 1, in <module>
  File "<ipython console>", line 3, in __init__
TypeError: super() argument 1 must be type, not classobj

なんで!?!?

教えてエロい人!!!

...         super(MyBrowser,self).__init__(self)

...         mechanize.Browser.__init__(self)

にすれば動くんだけど、なんかキモイなぁ><

2009-03-12

東條さん!!大変です!!


僕、良くわかってないのですが、大変です!!

美人時計画像自分サーバに保存して公開してる人がいます!!

http://image.baidu.jp/i?tn=baiduimage&ct=201326592&cl=2&word=site%3Abijint.com&lm=-1&z=0

baidu

これってすっごく不味いですよね!!

良くわかりませんけど><

権利に基づいた対応をとらせて頂くべきだと思います!!!

担当/東條 2009/03/12 02:28 いつも美人時計を拝見して頂き、ありがとうございます。

拝見させて頂きました。

現在、当社はプライバシーポリシー違反する誘導、使用の取りやめのご協力をお願いしております。

3日以内に公開、使用の取りやめ行わない場合、権利に基づいた対応をとらせて頂く場合がございます。

ご協力宜しくお願いします。


東條

info@bijint.com

http://d.hatena.ne.jp/jYoshiori/20090311/1236768388#c1236792483

2009-03-11

RE: 美人時計画像ファイルが欲しい

http://d.hatena.ne.jp/Yamashiro0217/20090310/1236674979

のはてぶのタグに何故か Python タグがあったので、

これは Python で書けって事かなぁと思って書いてみました。

import sys,os,urllib,time;[[[globals().__setitem__('url','http://www.bijint.com/jp/img/photo/%02d%02d.jpg' % (i, j))] and [globals().__setitem__('file',open(os.path.basename(url), 'wb'))] and [file.write(urllib.urlopen(url).read())] and [file.close()] and [time.sleep(5)] for j in range(60)] for i in range(24)]

上記との違いは僕が外道では無いので sleep 入れてみたくらいでしょうか?

エラー処理とかはしてません><

ご利用は計画的に!!