【问题标题】:Best way to poll a web service (eg, for a twitter app)轮询 Web 服务的最佳方式(例如,对于 twitter 应用程序)
【发布时间】:2010-09-30 14:56:00
【问题描述】:

我需要轮询 Web 服务,在本例中是 twitter 的 API,我想知道关于这个主题的传统智慧是什么。我不确定这是否重要,但过去我一直发现反馈很有用。

我想出的几个场景:

  1. 查询过程每 X 秒启动一次,例如 cron 作业运行 python 脚本

  2. 一个进程在每次迭代中不断循环和查询,例如……嗯,这是我进入陌生领域的地方。我只是运行一个没有结束的python脚本吗?

感谢您的建议。

ps - 关于 twitter 的细节:我知道它会发送电子邮件用于关注和直接消息,但有时可能需要解析@replies 的灵活性。在这些情况下,我相信民意调查是最好的。

pps - twitter 将机器人限制为每 60 分钟 100 个请求。我不知道这是否也限制了网页抓取或 RSS 提要阅读。有人知道被列入白名单有多难吗?

再次感谢。

【问题讨论】:

  • 我想做一些科学数据分析,向twitter.com/help/request_whitelisting提出了一个描述得体的请求,并在一周内被列入白名单。所以只要告诉他们你想做什么,然后等待,如果你尝试,我不会受伤。

标签: python twitter polling


【解决方案1】:

“我只是运行一个没有结束的python脚本吗?”

这个陌生的领域怎么样?

import time
polling_interval = 36.0 # (100 requests in 3600 seconds)
running= True
while running:
    start= time.clock()
    poll_twitter()
    anything_else_that_seems_important()
    work_duration = time.clock() - start
    time.sleep( polling_interval - work_duration )

这只是一个循环。

【讨论】:

  • 现在你需要一个 cron 作业来确保这个脚本是有效的。
  • 或服务器监控应用程序 - 大多数服务器“持续”运行,没有人遇到问题。也就是说,它们通常比这个小例子更复杂,所以只需将内部循环作为 cron 作业执行即可。
  • 此外,如何确保 cron 始终运行? :)
  • 如果 cron 停止,我认为这意味着操作系统已经停止。您希望它由 inittab 启动(并重新启动),而不是 cron。
  • 上次我写其中一个时,它 24x7 运行了大约 5 年,没有出现故障或中断。 “失败的风险”是微观的。
【解决方案2】:

您应该有一个类似于 Ping 或 Heartbeat 页面的页面。如果您有另一个“触发”或点击该页面的进程,通常您可以在您的网络主机的控制面板中执行此操作,或者如果您有本地访问权限,则使用 cron。然后,此脚本可以统计它在数据库或某些数据存储中轮询的频率,然后您可以根据实际需要频繁地轮询服务,当然将其限制在提供者限制的范围内。您绝对不想(当然也不想依赖)“不会结束”的 python 脚本。 :)

【讨论】:

  • 感谢您的回复。当您说“页面”时,您的意思是网页?我确实有一个运行网站的服务器,但我可以直接与后端 python 和数据库交互,而无需将数据发送到 URL。如果我误解了,我很抱歉;我想看看我是否遗漏了什么,例如效率。
  • 哦,我明白了,我想我误解了你。一个cron工作就可以了。唯一的问题是让脚本持续运行,您需要某种方法来确保它正在运行,以防意外失败。
猜你喜欢
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-27
  • 2011-03-17
  • 1970-01-01
  • 2013-04-01
  • 1970-01-01
相关资源
最近更新 更多