Доступ к API потоковой передачи Twitter с помощью libcurl и C - PullRequest
2 голосов
/ 21 января 2011

Я пытаюсь написать программу на C, которая будет брать каждый твит из потокового API и сохранять его в базе данных.Однако я не могу заставить его работать, я использую следующий код:

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


size_t callback_func(void *ptr, size_t size, size_t count, void *stream) {
  /* ptr - your string variable.
  stream - data chuck you received */
printf("res %s \n \n", (char*)ptr); //prints chunck of data for each call.

}

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

  curl = curl_easy_init();
  if(curl) {
   curl_easy_setopt(curl, CURLOPT_URL, "http://google.com/");
    //curl_easy_setopt(curl, CURLOPT_USERPWD, "JEggers2:password");
    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, callback_func);
    curl_easy_perform(curl);

    /* always cleanup */ 
     curl_easy_cleanup(curl);


  }


  return 0;
}

Этот код выводит только один твит в формате JSON.Что я делаю неправильно?спасибо

1 Ответ

1 голос
/ 26 января 2011

Проблема в том, что callback_func ничего не возвращает.

Согласно спецификации , вы должны вернуть size, если чтение было успешным.

Указатель на функцию, который должен соответствовать следующему прототипу: функция size_t (void * ptr, size_t size, size_t nmemb, void * userdata);Эта функция вызывается libcurl, как только получаются данные, которые необходимо сохранить.Размер данных, на которые указывает ptr, равен размеру, умноженному на nmemb, он не будет нулевым.Возвращает количество байтов, фактически обработанных.Если эта сумма отличается от суммы, переданной в вашу функцию, она сообщит об ошибке в библиотеку.Это прервет передачу и вернет CURLE_WRITE_ERROR.

...