【问题标题】:Accessing the Twitter Streaming API with C使用 C 访问 Twitter 流 API
【发布时间】:2011-06-11 21:36:58
【问题描述】:

我正在尝试使用 C 访问 Streaming API,并且正在使用以下代码:

#include <stdio.h>
#include <curl/curl.h>

int main(void)
{
  CURL *curl;
  CURLcode res;

  curl = curl_easy_init();
  if(curl) {
    curl_easy_setopt(curl, CURLOPT_URL, "http://stream.twitter.com/1/statuses/sample.json?delimited=length -uJEggers2:password");
    res = curl_easy_perform(curl);
    printf("results: %c", res);
    /* always cleanup */ 
    curl_easy_cleanup(curl);
  }
  return 0;
}

这在执行时什么也不打印,我做错了什么?谢谢。 编辑:当我使用 google.com 作为 URL 时,该代码有效,但这似乎是 Streaming API 的问题。有任何想法吗?

【问题讨论】:

  • 即使没有 CURLOPT_HTTPAUTH 也能正常工作吗?

标签: c api twitter curl streaming


【解决方案1】:

函数curl_easy_perform() 只返回错误代码。要真正检索数据,您必须将 CURLOPT_WRITEFUNCTION 设置为您自己的回调函数。

编辑:您也不能在 URL 字符串中使用“-uJEggers2:password”,您必须使用 CURLOPT_HTTPAUTH、CURLOPT_USERNAME 和 CURLOPT_PASSWORD 设置身份验证选项。

【讨论】:

  • 这不对,当我使用 google.com 而不是 Streaming API url 时,源代码会被打印出来。有什么想法吗?
  • Curl 可能会在您没有指定自己的 WRITEFUNCTION 时将输出写入标准输出。示例代码见stackoverflow.com/questions/2329571/…。
  • 另请参阅我对用户身份验证的编辑,这可能是您没有看到任何输出的原因。如果你想处理输出,你仍然必须使用 writefunction,否则它只是 libcurl 将输出打印到 stdout。
  • 能否请您在这里介绍一下您是如何解决这个问题的。我不知道应该如何设置 CURLOPT_HTTPAUTH 以允许使用 C 进行 Twitter 流式传输。谢谢!
【解决方案2】:

edit:我认为使用 google.com 和 twitter API 的区别在于,在这种情况下,您尝试使用“-u user:pass”指定密码。我在 CURL API 中没有看到提到过这种技术。

如http://curl.haxx.se/libcurl/c/curl_easy_setopt.htmlhttp://curl.haxx.se/libcurl/c/curl_easy_setopt.html“名称和密码选项”部分所述,请改为传递用户并使用额外的 curl_easy_setopt(curl, CURLOPT_USERPWD, "user:pass") 单独传递

【讨论】:

  • 当我使用 google.com 作为地址时,代码可以工作,它会打印源代码。这只是 Streaming API 的问题。有什么想法吗?
  • 您在问题中说没有打印任何内容。除了“结果:__”之外,你什么意思?
  • 查看关于用户身份验证的编辑,与 Flavio 的结论相同。
  • 很高兴它有效。请考虑投票并选择一个答案,它会支持人们回答您的后续问题。
猜你喜欢
  • 2011-12-26
  • 1970-01-01
  • 2015-03-06
  • 2016-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-12
  • 2018-01-07
相关资源
最近更新 更多