HTTP-authenticatie gebruiken met libcurl in C voor Twitter Streaming

Mogelijk duplicaat:
   Probeert de Twitter Streaming API te gebruiken met C

Ik weet niet zeker wat ik fout doe in mijn code, maar het lijkt erop dat er een probleem is met de authenticatie. Elke keer als ik de code uitvoer, is er geen uitvoer.

Mijn doel hier was dat ik een stroom van Tweets van Twitter API wilde ontvangen. Het probleem kan iets anders zijn. Maar ik weet het niet zeker. Help alstublieft.

Dit is de C-code:

#include 
#include 
#include 
#include 

struct string {
  char *ptr;
  size_t len;
};

void init_string(struct string *s) {
  s->len = 0;
  s->ptr = malloc(s->len+1);
  if (s->ptr == NULL) {
    fprintf(stderr, "malloc() failed\n");
    exit(EXIT_FAILURE);
  }
  s->ptr[0] = '\0';
}

size_t writefunc(void *ptr, size_t size, size_t nmemb, struct string *s)
{
  size_t new_len = s->len + size*nmemb;
  s->ptr = realloc(s->ptr, new_len+1);
  if (s->ptr == NULL) {
    fprintf(stderr, "realloc() failed\n");
    exit(EXIT_FAILURE);
  }
  memcpy(s->ptr+s->len, ptr, size*nmemb);
  s->ptr[new_len] = '\0';
  s->len = new_len;

  return size*nmemb;
}

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

  curl = curl_easy_init();
  if(curl) {
    struct string s;
    init_string(&s);

    curl_easy_setopt(curl, CURLOPT_URL, "http://stream.twitter.com/1/statuses/sample.json");
    curl_easy_setopt(curl, CURLOPT_USERPWD, "neilmarion:password_here");
    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writefunc);
    curl_easy_setopt(curl, CURLOPT_WRITEDATA, &s); 
    res = curl_easy_perform(curl);

    printf("%s\n", s.ptr);
    free(s.ptr);

    /* always cleanup */
    curl_easy_cleanup(curl);
  }
  return 0;
}
2

1 antwoord

  1. Use ssl.
  2. You could use curl_easy_strerror() to get a human readable error message:

    printf("curl error %s", curl_easy_strerror(res));
    
  3. You'll run out of memory after a while (at my end the stream is ~250Kb/s). Save interesting info to a persistent storage and discard the rest.
3
toegevoegd