ゆとりーなの日記

日記的な事を書いて行くと思はれる

Twitterのタイムライン表示

 取り合えずこんな感じで表示はできました。Web系は(註:どちらかというと"も")正直まだよく分かってないです。

#include <fstream>
#include <iostream>
#include <string>
#include <vector>

#define _WIN32_WINNT 0x0501
#include <boost/asio.hpp>
#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/xml_parser.hpp>
#include <boost/range/algorithm/for_each.hpp>

// 適当なユーザーネームを
const std::string kUserName = "";

int main() {
  boost::asio::ip::tcp::iostream s("twitter.com", "http");
  s << "GET /statuses/user_timeline.xml?screen_name=" << kUserName << " HTTP/1.0\r\n";
  s << "Host: twitter.com\r\n";
  s << "\r\n";
  s << std::flush;

  std::string line;
  while(getline(s, line)) {
    std::cout << line << std::endl;
    if (line == "\r") {
      break;
    }
  }

  boost::property_tree::ptree pt;
  boost::property_tree::read_xml(s, pt);

  std::ofstream of("timeline.log");

  if (!of) {
    return -1;
  }
  
  boost::for_each(pt.get_child("statuses"), [&](const boost::property_tree::ptree::value_type& child) {
    boost::for_each(child.second, [&](const boost::property_tree::ptree::value_type& child) {
      if (child.first == "text") {
        of << child.second.data() << std::endl;
      }
    });
  });
  
  return 0;
}

 コマンドプロンプトさんがUTF-8を表示できないようなので取り敢えずファイル出力に。こういうところはWindowsの不便なところ?ですかね。ところでBoost.PropertyTreeでXML解析ってこんなに面倒でしたっけ。なんか物凄くC#が羨ましく感じられたような気がします。
追記:xmlの読み込みはこっちのほうがいいかも。

boost::for_each(pt.get_child("statuses"), [&](const boost::property_tree::ptree::value_type& child) {
  if (child.first == "status") {
    of << child.second.get<std::string>("text") << std::endl;
  }
});