1

我用 Python 编写了一个 Twitter 应用程序。以下是我用于模块的代码,我在其中找到 x 是否跟随 y。这段代码可以明显改进。一种pythonic的方式来做到这一点?

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__() 使用动态类方法构造,向您展示编写不会重复自身的 API(换句话说,遵循 DRY [不要重复自己] 原则)的 Pythonic 方式。您的示例将类似于:

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

即使 twitter 类没有“友谊”或“存在”方法/属性。

(警告:我没有测试上面的代码,所以它可能不太正确,但应该非常接近)

于 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

谷歌向我扔了这个带有Twitter API for Python的库。我认为这样的图书馆会大大简化这项任务。它有一个 GetFollowers() 方法,可以让您查找是否有人在关注您。

编辑:看起来您无法查找任意用户的关注者。

于 2009-02-17T11:21:13.423 回答