Tosainu Lab

みょん(進捗)

みょん。

 

以前から書いていたTwitter関連のプログラムが一歩進んだので報告しておきます。

 

 

アクセストークン取得および一部のAPIが叩けるようになっただけなので、ソースの公開はまだまだ先の予定ですが、3日間悩んだlibcurlでpostする部分のコードを張っておこうと思います。

// Init libcurl
CURL *curl;
CURLcode ret;
struct curl_slist *headers = NULL;

curl_global_init(CURL_GLOBAL_ALL);

curl = curl_easy_init();
string chunk;
if (curl == NULL) {
  cerr << "curl_easy_init() failed" << endl;
  return 1;
}

// Set Http-Header
headers = curl_slist_append(headers, "Expect:");
headers = curl_slist_append(headers, "Content-Type: application/x-www-form-urlencoded");
headers = curl_slist_append(headers, "Authorization :(ry");

// Set libcurl Parameter
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
curl_easy_setopt(curl, CURLOPT_URL, "URL");
curl_easy_setopt(curl, CURLOPT_POST, 1);
curl_easy_setopt(curl, CURLOPT_HTTPHEADER , headers);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "");
curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, 0);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_to_string);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, (string*)&chunk);

// Get Data and Clean
ret = curl_easy_perform(curl);
curl_easy_cleanup(curl);
curl_slist_free_all(headers);

if (ret != CURLE_OK) {
  cerr << "curl_easy_perform() failed." << endl;
    return 1;
}

// Show Respone
cout << chunk << endl;

Tweetするときなど、引数を設定しなければいけないときは、

curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "送信する引数をurlエンコードしたもの");
curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, ↑の文字数);

を設定してやればよいし、

TL取得など、GETmethodを使う場合は

curl_easy_setopt(curl, CURLOPT_POST, 1);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "");
curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, 0);

の行を消せばいけるはずです。

今後、日本語などが扱えるように改良するほか、他のプログラムでも簡単に使えるようにライブラリ化していこうかなーと思っています。

 

 

全く関係ないのですが、とあるふぉろわーさんの紹介でRubyを触ってみました。

やばい

「さっ」と気軽に書ける感じがいいですね♪

今後、Rubyも少しずつ勉強していきたいな〜と思います。

 

テストも近づいてきたので再び更新頻度は落ちます。

(いつもと変わらずついったーには出現してる気がしますが・・・)

ではでは〜