• 作成:

googleオートコンプリートでfizzbuzz

  • このプログラムを実行してはいけません
  • googleオートコンプリートでfizzbuzz
  • curlのラッパー
  • boost xml_parser

背景

2014年10月に, 大学のプログラミング演習の課題として, fizzbuzzを書いてきてくださいというものが出ました.

普通にやっても面白くないので, googleのオートコンプリート機能を使って余りを判定するようなプログラムを書きました. googleのオートコンプリートには簡単な電卓機能があります.

書いたのは2014年なので, 今動くかはわかりませんし, このプログラムを実行してはいけません.

ソースコード

curl

ネットワーク通信にはcurlを使い, std::unique_ptrのデストラクタでリソース解放が行われるようなc++用ラッパーを一応書きました. この規模のプログラムならそんなものを使わずにベタ書きすれば良いのですが, 当時std::unique_ptrの機能を使いたかったので書きました.

普通にc++向けのちゃんとしたバインディングがあることをこれを書いた後で知りました. 実用するときはそういうものを使ったりコマンドライン呼び出ししたりしましょう.

xml_parser

googleはコンプリートの一覧をxmlで返してくれるので, そのパーサーにはboostのxml_parserを使いました.

ループを回す

ここまでやったら後は普通にループを回して, 普通にネットワーク通信で3と5で割れるかの情報を取得するだけですね.

大学の先生からの評価

要約すると「面白いことをするのは構わないけれど, boostやcurlなどの標準ライブラリでないものを使われると評価に困るのでそういったものは控えてください」と言われました.

当時の私は「じゃあ自力でxmlパーサやhttpクライアントを書かないとダメかなあ」などと考えていました.

今は「c++標準ライブラリにxmlパーサやhttpクライアント入らないかなあ」などと考えています.

怠惰に退化してますね.

google先生からの評価

当時の私は知りませんでしたが, google検索への大量の機械的アクセスは禁止されています. 実際にこのプログラムをテストのために数回動かしていたらgoogleからしばらくBANされました.

真面目にやるならちゃんとタイムラグを設置する必要があるでしょう.

現在

Google ウェブマスター向け公式ブログ: Autocomplete API の今後のご利用について

現在調べてみたところ, googleによるオートコンプリートAPIは提供が終わっているようなので, 真似をしたい人はbingなどの類似のサービスを使いましょう.