【问题标题】:Looping through twitter trends data in python在 python 中循环浏览 Twitter 趋势数据
【发布时间】:2014-04-29 16:03:46
【问题描述】:

我有一个机器人脚本,它连接到 Twitter API(使用 tweepy 库),获取 atm 趋势标签数据并撰写一条以该列表中的标签结尾的推文。它按不超过 120 个字符的行读取文本,但有时会发生热门话题标签超过 20 个字符,这会导致推文超过 140 个字符的推特限制,从而破坏脚本的运行。

所以我想写一个嵌套循环,它会说这样的话:

get twitter trends data
if the top hashtag is longer than 120 characters
then check the second one
and if even the second one is longer than 120 characters
wait for 15 min and check again
tweet when you find a hashtag than is smaller or same as 20 characters 

我试过了,但没用:

for line in f:
    trends1 = api.trends_place(1)
    # print trends1
    hashtags = [x['name'] for x in trends1[0]['trends'] if x['name'].startswith('#')]
    # print hashtags
    print hashtags[0]
    if len(hashtags[0]) <= 20:
        trend_hashtag = hashtags[0]
        api.update_status(line + trend_hashtag)
    elif len(hashtags[0]) > 20:
        trend_hashtag = hastags[1]
        api.update_status(line + trend_hashtag)
    elif len(hashtags[1]) > 20:
        time.sleep(900)
    time.sleep(10800)

我刚开始学习python,我做错了什么,你能帮帮我吗?

连接到 twitter api 并在列表中获取趋势标签工作正常,问题只是在描述的循环中。谢谢!

【问题讨论】:

  • 为什么time.sleep(10800)for 循环中?这将在循环的每次迭代中暂停您的程序 3 小时。
  • 这是试图指示机器人每 3 小时只发一次推文,这样就不会太垃圾了

标签: python loops twitter tweepy


【解决方案1】:

您的第一个 elif 似乎与您在问题顶部描述的规范不匹配。

if 语句检查第一个主题标签是否为 ≦20 个字符。如果是这样,它会发推文;如果没有,它不会。到目前为止,一切都很好。然后,保证您的第一个 elif 语句可以执行 - 因为如果 len(hashtags[0]) 不是 &lt;= 20,那么它肯定是 &gt; 20,所以您永远不会到达第二个 @ 987654328@。如果您想检查第二个标签是否 ≦20 个字符,您的第一个 elif 应如下所示:

elif len(hashtag[1]) <= 20:
    trend_hashtag = hashtags[1] # you have a typo here btw
    api.update_status(line + trend_hashtag)

最后,您的最后一个elif 应该只是else。如果您希望它在两次推文之间休眠 3 小时,您应该在每次推文后拨打time.sleep(10800)。总之,您的代码最终应该看起来更像这样:

for line in f:
    trends1 = api.trends_place(1)
    hashtags = [x['name'] for x in trends1[0]['trends'] if x['name'].startswith('#')]
    trend_hashtag = None
    if len(hashtags[0]) <= 20:
        trend_hashtag = hashtags[0]
    elif len(hashtags[1]) <= 20:
        trend_hashtag = hashtags[1]
    if trend_hashtag:
        api.update_status(line + trend_hashtag)
        time.sleep(3*60*60)
    else:
        time.sleep(15*60)

这样,你在发推文后只睡 3 小时 - 否则(如果你没有发推文),你只睡 15 分钟,然后再试一次。

【讨论】:

  • 感谢您解释流程!有很大帮助。会试一试的。
  • 运行一个脚本,它工作正常。等待有问题的标签出现,但我认为应该这样做,谢谢!
  • 我可以从 twitter 获得最低趋势的推文
  • @ShrutiSrivastava 请ask a new question 提供更多详细信息,而不是在这里发表评论。
猜你喜欢
  • 2011-03-11
  • 2013-05-10
  • 2016-03-29
  • 2016-12-16
  • 2014-09-17
  • 2017-03-11
  • 2013-05-08
  • 2014-02-07
  • 1970-01-01
相关资源
最近更新 更多