【问题标题】:Twitter Python program giving connection errorTwitter Python程序给出连接错误
【发布时间】:2012-12-03 16:22:58
【问题描述】:

我正在使用 Python 中的 Twitter 数据挖掘应用程序,使用模块 twitter 和 redis,基于 Matthew A.Russell 的“挖掘社交网络”一书。每当我尝试使用 redis 模块获取朋友和关注者的信息时,都会出现以下错误:

raise ConnectionError(self._error_message(e))
ConnectionError: Error 10061 connecting localhost:6379. No connection could be made because the target machine actively refused it.

不使用 Redis 时,可以获取所有好友和关注者的 id。但我需要 Redis 对数据执行某些分析。我的源代码如下:

import json
import locale
import redis
from prettytable import PrettyTable

# Pretty printing numbers
from twitter__util import pp 

# These functions create consistent keys from 
# screen names and user id values
from twitter__util import getRedisIdByScreenName 
from twitter__util import getRedisIdByUserId

SCREEN_NAME = "timoreilly"

locale.setlocale(locale.LC_ALL, '')

def calculate():
    r = redis.Redis()  # Default connection settings on localhost

    follower_ids = list(r.smembers(getRedisIdByScreenName(SCREEN_NAME,
                        'follower_ids')))

    followers = r.mget([getRedisIdByUserId(follower_id, 'info.json')
                       for follower_id in follower_ids])
    followers = [json.loads(f) for f in followers if f is not None]

    freqs = {}
    for f in followers:
        cnt = f['followers_count']
        if not freqs.has_key(cnt):
            freqs[cnt] = []

        freqs[cnt].append({'screen_name': f['screen_name'], 'user_id': f['id']})

    # It could take a few minutes to calculate freqs, so store a snapshot for later use

    r.set(getRedisIdByScreenName(SCREEN_NAME, 'follower_freqs'),
          json.dumps(freqs))

    keys = freqs.keys()
    keys.sort()

    print 'The top 10 followers from the sample:'

    fields = ['Date', 'Count']
    pt = PrettyTable(fields=fields)
    [pt.set_field_align(f, 'l') for f in fields]

    for (user, freq) in reversed([(user['screen_name'], k) for k in keys[-10:]
                                    for user in freqs[k]]):
        pt.add_row([user, pp(freq)])

    pt.printt()

    all_freqs = [k for k in keys for user in freqs[k]]
    avg = reduce(lambda x, y: x + y, all_freqs) / len(all_freqs)

    print "\nThe average number of followers for %s's followers: %s" \
        % (SCREEN_NAME, pp(avg))

# psyco can only compile functions, so wrap code in a function

try:
    import psyco
    psyco.bind(calculate)
except ImportError, e:
    pass  # psyco not installed

calculate()

我们将不胜感激任何和所有的帮助。谢谢!

【问题讨论】:

    标签: python api networking twitter connection


    【解决方案1】:

    这是运行 Redis 的端口。如果我是你,我会仔细检查 Redis 服务器是否在正确的端口和接口上运行。要对此进行测试,请确保您已安装 telnet 客户端并执行以下操作:

    $ telnet localhost 6379
    

    如果失败了,那么 Redis 服务器实际上并没有在 Redis 客户端库默认情况下运行,在这种情况下,您必须在构造函数参数中为客户端提供正确的详细信息。

    【讨论】:

    • 您使用的是什么操作系统?如果是 Ubuntu 或其他一些 Debian 衍生版本,您将运行以下命令:sudo apt-get install telnet
    • Windows 7。我安装了 telnet 客户端并运行命令 telnet localhost 6379。如果失败。输出为:Connecting to localhost...Could not open communication to the host, on port 6379: Connect failed.
    • 那么问题的根源在于您需要在您的机器上设置一个 Redis 服务,或者如果您已经运行了一个 Redis 服务,那么它的配置有误。如果它正在运行,您应该会在 Windows 任务管理器中看到 redis.exeredis-server.exe。 Windows 并不是运行 Redis 的理想选择,但可以启动并运行 Redis 服务。查看此问题的答案以获取有关这样做的更多信息:stackoverflow.com/questions/6476945/…
    猜你喜欢
    • 2013-11-02
    • 1970-01-01
    • 1970-01-01
    • 2012-04-10
    • 2017-01-03
    • 2018-05-02
    • 1970-01-01
    • 2017-08-21
    • 2018-08-11
    相关资源
    最近更新 更多