本日AM 2:00ごろにCanCam新世代モデルオーディションの非公式なランキングサイトをリリースしました。

CanCam NGMA-RANKING

CanCam NGMA-RANKING

はてブ数

http://cc.cre8or.jp/

CanCam NGMA-RANKING

CanCam新世代モデルオーディションとは、あの小学館のファッション誌、CanCamがGoogle+で行っているモデルオーディションです。SNSと賞金総額1,000万円というお金の力で一般ユーザーからプロまで幅広くモデルを募集し、“SNSを使いこなし活かせる新世代のモデル”を発掘するオーディションです。詳しくは公式サイトを御覧ください。

ランキングサイトの雰囲気はサイトを直接みてもらうか、こちらの記事でattripさんがキレイにまとめてくれました。
紹介ありがとうございました。

開発のチラシの裏

某I氏にGoogle+ APIについて横から一方的にごちゃごちゃ言うのも心もとなかったので、なんとなく形にしてみようと思ったのがキッカケです。某I氏はもっと素晴らしいものをつくってくれると期待しております。

さてさて、今回Google+ HTTP APIというものを使いました。これがなんともクセのあるAPIなんですよね。これからこのAPIを触る人のために、このサイトで使った小技を紹介します。

APIの仕様(重要なところ)

  • リクエスト回数の上限:1日10,000request(5回/1sec)
  • 投稿を検索しても存在するすべての投稿が引っかかるわけじゃない。

1つ目のリクエスト回数の制限は、その中で思っていることができるように実装したいところ。
2つ目は予想以上に問題なんでした。

何度検索しても表示されない投稿があるなら諦めもつきますが、数分後に検索すると前回はあった投稿が引っかからないとか。
「何時何分にこの言葉で検索したから、この投稿が最適だよ!」とGoogleさんが推してきます。検索で世界を変えるGoogleさんらしいですね。
でも僕は「#CanCam #新世代モデル」のハッシュタグがついてる投稿をすべて欲しいんですよ。あなたが要らなくても僕には要るんですよ。

適当な言葉を選んで片っ端から検索していけば、全て取得できるかもしれませんが、リクエスト回数の制限に引っかかる可能性があります。

リクエストを上手に使おう

+1の数で結果が決まるのである程度の頻度で取得してもいいのですが、やっぱり多少のリアルタイム性、「現在の+1の状況」が必須だと思うんです。と、なると各投稿の状況を15分に1回は更新したいですね。
じゃあその更新頻度なら、リクエスト回数はどれくらいになるでしょうか?実際の投稿数から試算してみます。

  • 1日の最大投稿数200件ほど
  • 全投稿の40%ほどは午前2時には投稿される
  • 昼には150件くらい

投稿の増加具合はこんな感じです。実際に現在のところ1日で180件ほどの投稿があります。
そしてその40%ほど(70件)が1日の開始後2時間(0時~2時)で揃います。これは+1の数を競うので、まだ起きてる人と早朝の寝起きを狙える0時~2時は激戦区になるんです。
それからはまぁアクティブユーザーの増加に合わせて投稿も増え、昼には150件、22時頃には200件になる。と仮定します。

時刻投稿数リクエスト回数
0時80320
1時80320
2時80320
3時80320
4時80320
5時80320
6時80320
7時100400
8時110440
9時120480
10時130520
11時140560
12時150600
13時150600
14時160640
15時160640
16時170680
17時170680
18時180720
19時180720
20時190760
21時190760
22時200800
23時200800
合計13,040 回

総リクエスト回数 13,040回。API制限は10,000回。さあどうしましょう。って話ですね。

実は、ちょちょっと工夫すれば1,200回くらいに抑えることができるんです。

その工夫とは、1件1件は更新せずに毎回全体を検索してその日の最初の投稿まで取得します。
Search機能の検索結果には、投稿の+1、コメント数、再共有数が含まれています。なので、特定の条件の投稿の+1などを取得する目的であれば、全体に検索するほうが手っ取り早いです。
1回のリクエストで最大20件まで投稿を取得できるので、何度かページ送りをしても何度かリクエストすれば100件くらいの投稿を処理できます。

この方法で、20回以下のリクエスト数で200件以上を更新できるようになります。1時間に4回しても80回ほどです。

検索機能がマジでアレ

さて、少し希望が見えてきましたが、ここで違う問題が発生するんです。単純に「#CanCam #新世代モデル」で検索しても正しい投稿が取得できないんです。間が飛びまくった結果がでてきます。

これはもう計算とか理屈ではなく「キーワードを変えまくって取るしかない」と思いました。
どんなキーワードで取得すれば効率がいいかな、と小一時間どころか半日くらい試行錯誤していくわけですよ。

キーワードを変えれば取れる投稿、言語設定を変えれば取れる投稿、キーワードに投稿者名を含めないと取れない投稿などなど、条件は様々、ぼくが出した結論は「どんだけがんばっても取れない投稿は取れない。」です。

そして理屈はわかりませんが、わかったことが何点かあります。

  • 検索語句を複数にすると間引かれる投稿が増える
  • 検索結果の数が増えると間引かれる投稿が増える

これを踏まえ、検索語句「#CanCam #新世代モデル」で20件ずつ表示(設定最大数)で検索していたところを、
検索語句「#CanCam」で10件ずつ表示(設定デフォルト)にしました。

するとなんということでしょう。今まで取得できていなかった投稿がみるみる現れたではありませんか。

検索語句が1つになり、取得数も減ったためAPIリクエスト回数がかなり増えてしまいますが、それでも5,000を超えることはありません。

と、いうことで今はこの方法でぼちぼちと取得しています。取得漏れはまだありますが、それは半ば諦めています。
これからAPIの仕様も変更されるかもしれませんし、誰かが何かつくる時に参考になればと思います。