Twitter からのリンクをマネタイズする試み

はてブツイート : はてなブックマークをTwitterに投稿 というサービスを作った。はてなブックマークweb hook を受けて、Twitter の OAuth で投稿するものだ。OAuth 画面によると約500ユーザーに使ってもらっている。
そうなるとこれを何とか収益化できないかと思うのが人情だ。簡単に思い付くのは、短縮URLを利用して広告を入れることだが、permalink を阻害したり、いろいろ邪悪だ。あとそもそも日本語広告と日本への送金に対応したサービスが無い。
というわけで奇抜なアイディアも湧いて来ないので、素直に広告を貼っておく。
ところが Google Adsense で表示される広告はこんなので、クリックを誘うとは思えない。


で、ちょっと細工をしてみた。
普通に http://worris3.sakura.ne.jp/HatenaBookmarkMultiPost/ を開くと、ただのカテゴリー広告が表示される。

一方、Twittertweet (例: http://twitter.com/worris/status/6332216695)に表示される source クライアント名

をクリックして開くと、元投稿にマッチした広告が表示される。


まぁ、いちいち個別 tweetpermalink からクライアント名をクリックして飛んでくる人はあまりいないと思うので効果は期待していない。
Twitter のユーザーページからのリンクにも対応すれば多少向上するかもしれないが処理が面倒なので今のところパス。
とりあえず実験ということで。


大体こんなコード。JavaScriptリファラを取得して本文を読み、Yahoo!キーフレーズ抽出API にかける。JavaScript だけでも書けるが楽な方へ。
JavaScript オンリーにあっさり書き直し。ユーザーページにも対応。
精度を見たい人はこちらからどうぞ。

<script src="referer2ad.js" type="text/javascript"></script>
<script type="text/javascript">
referer2ad();
</script>
function referer2ad(){
  document.write('<div id="referer2ad"></div>');
  if (typeof(document.referrer)!='undefined') {
    var referer=document.referrer.split('/');
    if (referer[2]=='twitter.com') {
      if (referer[4]=='status' || referer[4]=='statuses') {
        var s=document.createElement('script');
        s.src='http://twitter.com/statuses/show/'+referer[5]+'.json?callback=r2aGetTweet';
        document.body.appendChild(s);
      }else if (referer.length==4 && referer[3]!='home') {
        var s=document.createElement('script');
        s.src='http://twitter.com/users/show/'+referer[3]+'.json?callback=r2aGetTweet';
        document.body.appendChild(s);
      }else{
        document.getElementById('referer2ad').innerHTML='<iframe src="http://rcm-jp.amazon.co.jp/e/cm?t=worris-22&o=9&p=12&l=bn1&mode=books-jp&browse=466298&fc1=000000&lt1=_blank&lc1=0000FF&bg1=E0FF92&f=ifr" marginwidth="0" marginheight="0" width="300" height="250" border="0" frameborder="0" style="border:none;" scrolling="no"></iframe>';
      }
    }else{
      document.getElementById('referer2ad').innerHTML='<iframe src="http://rcm-jp.amazon.co.jp/e/cm?t=worris-22&o=9&p=12&l=bn1&mode=books-jp&browse=466298&fc1=000000&lt1=_blank&lc1=0000FF&bg1=E0FF92&f=ifr" marginwidth="0" marginheight="0" width="300" height="250" border="0" frameborder="0" style="border:none;" scrolling="no"></iframe>';
    }
  }else{
  document.getElementById('referer2ad').innerHTML='<iframe src="http://rcm-jp.amazon.co.jp/e/cm?t=worris-22&o=9&p=12&l=bn1&mode=books-jp&browse=466298&fc1=000000&lt1=_blank&lc1=0000FF&bg1=E0FF92&f=ifr" marginwidth="0" marginheight="0" width="300" height="250" border="0" frameborder="0" style="border:none;" scrolling="no"></iframe>';
  }
}

function r2aGetTweet(data) {
  var s=document.createElement('script');
  s.src='http://jlp.yahooapis.jp/KeyphraseService/V1/extract?appid=apnJtpOxg65jfO8EeqccQdCbjtWKGjtyvMx_77sLl_4iebjXVpmSZEblhkEE&sentence='+encodeURIComponent((typeof(data['text'])=='undefined' ? data['status']['text'] : data['text']).replace('[B!]','').replace(/http:\/\/\S+/,''))+'&output=json&callback=r2aShowAd';
  document.body.appendChild(s);
}

function r2aShowAd(data) {
  var keyword='Twitter';
  for (var i in data) {
    if (data[i]==100) {keyword=i; break;}
  }
  document.getElementById("referer2ad").innerHTML='<iframe src="http://rcm-jp.amazon.co.jp/e/cm?t=worris-22&o=9&p=12&l=st1&mode=books-jp&search='+encodeURIComponent(keyword)+'&fc1=000000&lt1=_blank&lc1=0000FF&bg1=E0FF92&f=ifr" marginwidth="0" marginheight="0" width="300" height="250" border="0" frameborder="0" style="border:none;" scrolling="no"></iframe><br /><span style="font-size:10pt;">Keyword: '+keyword+'</span>';
}