1

私はPythonでTwitterアプリケーションを作成しました。以下は、xがyの後に続くかどうかを確認するモジュールに使用したコードです。このコードは明らかに改善することができます。それを行うためのPythonの方法は?

import urllib2
import sys
import re
import base64
from urlparse import urlparse
import simplejson

def is_follows(follower, following):

    theurl = 'http://twitter.com/friendships/exists.json?user_a='+follower+'&user_b='+following

    username = 'uname1'
    password = 'pwd1'

    handle = urllib2.Request(theurl)

    base64string = base64.encodestring('%s:%s' % (username, password))
    authheader =  "Basic %s" % base64string
    handle.add_header("Authorization", authheader)
    fol=True
    try:
        fol = simplejson.load(urllib2.urlopen(handle))
    except IOError, e:
        # here we shouldn't fail if the username/password is right
        print "It looks like the username or password is wrong."
    return fol

更新:インデントが修正されました。

4

4 に答える 4

2

三つのこと:

  • インデントを修正します(ただし、これは意図的に行われたものではないと思います)。
  • の構築では、連結の代わりにフォーマットを使用しtheurlます。
  • 変数を削除しfolます。むしろ、次のようにします。

try:
    return simplejson.load(urllib2.urlopen(handle))
except IOError, e:
    # here we shouldn't fail if the username/password is right
    print "It looks like the username or password is wrong."
    return False
于 2009-02-17T11:17:05.943 に答える
2

Konrad は、コードをより Pythonic にするために行うことができる変更について、適切な回答を提供してくれました。追加したいのは、これと同じことを行うための高度なコードに興味がある場合は、The Minimalist Twitter API for Python を確認してください。

__getattr__() と __call__() を使用した動的なクラス メソッド構築を使用して、それ自体を繰り返さない (つまり、DRY [自分自身を繰り返さない] 原則に従う) API を作成する Python の方法を示すことができます。あなたの例は次のようになります:

fol = twitter.friendships.exists(user_a="X", user_b="Y")

さえずりクラスには「友情」または「存在」メソッド/プロパティがありません。

(警告: 上記のコードはテストしていないので、正確ではないかもしれませんが、かなり近いはずです)

于 2009-02-17T11:58:36.763 に答える
2

コードから、基本 HTTP 認証を実行しようとしているように見えます。これは正しいですか?その場合、手動で HTTP ヘッダーを作成しないでください。代わりに urllib2.HTTPBasicAuthHandler を使用してください。ドキュメントの例:

import urllib2
# Create an OpenerDirector with support for Basic HTTP Authentication...
auth_handler = urllib2.HTTPBasicAuthHandler()
auth_handler.add_password(realm='PDQ Application',
                          uri='https://mahler:8092/site-updates.py',
                          user='klem',
                          passwd='kadidd!ehopper')
opener = urllib2.build_opener(auth_handler)
# ...and install it globally so it can be used with urlopen.
urllib2.install_opener(opener)
urllib2.urlopen('http://www.example.com/login.html')
于 2009-02-17T12:23:11.323 に答える
0

Google は、Python 用の Twitter API を含むこのライブラリを私に投げつけました。そのようなライブラリは、このタスクを大幅に簡素化すると思います。誰かがあなたをフォローしているかどうかを調べることができる GetFollowers() メソッドがあります。

編集: 任意のユーザーのフォロワーを検索できないようです。

于 2009-02-17T11:21:13.423 に答える