"血をもって書け。そうすればあなたは、血が精神だということを経験するだろう。"

SNSに関係ありそうなサイトのトラフィック

PHPというものを触ってみる需要がようやく正月に発生した。ちょうど任意ドメインのAlexaランキングを自動取得するという課題が練習によさげだったので書いてみた。サーバーで動作確認してGoogle Page Creatorにあげてみたけど動かない。PHPなどのサーバーサイドスクリプトやデータベースをサポートしてないというも。ただしJavaScriptは別。時代はJavaScriptに移行しつつあるということか。この方ものたまわく

「はじめてのWebプログラミング」でしょ?

それならもう答えははっきりしている。PerlでもRubyでもPythonでもましてやPHPでもない。

JavaScript、だ。

残しといてもしかたないけど捨てるのも時間分惜しいのでdump。

やること

例えばGREEのAlexaランキングで7,042位と書いてあるのをこのままどこかにコピペしても7,04282みたいなおかしな数字が出る。これはHTMLソースで

7<span class="c33e">,0</span>4<span class="c1ae">28</span>2</span>

のように数字を隠したり出したりするという細工をしてあるからで、どうせcssかなんか読み込んでるんだろうと踏んでみると

.c11e {
display: none
}
.c125 {
display: none
}
.c12d {
display: none
}
.c130 {
display: none
}

あった。これに載ってるclassをもってるspanの数字はダミー。

コード(ベタ貼り)

<?php
###alexa.comのランキングを整理
###written by satzz,2007/01/04

###元凶のcssを読みに行く
###このcssを隠してない意図が読めないが...
$css_cont=file('http://client.alexa.com/common/css/scramble.css');
$classlist=array();
foreach($css_cont as $line){
  preg_match('/\.(c.*) .*/',$line,$hit);
  array_push($classlist,$hit[1]);
}

###ランキングを知りたいドメインのリストを読み込んで1つずつ処理
$rank_list=array();
foreach(file('trgtlist.txt') as $line){
  $target=chop($line);
  $rank_list[$target]=get_ranking($target,$classlist);
}

###ランキングでソートして表示
asort($rank_list);
foreach($rank_list as $target => $ranking ) {  echo("|".$target."|".$ranking."|\n"); }

###alexaの吐いたHTMLソースからランキングを取得
###simplexml_load_fileが使えなかったので正規表現でゴリゴリ砕いてるだけです
function get_ranking($target,$classlist){
  $source=file_get_contents('http://www.alexa.com/data/details/traffic_details/'.$target);
  preg_match('/rank of:.*?-->(.*?)<\/span><!-- google_ad/',$source,$hit_list);
  $hit=$hit_list[1];
  while(strpos($hit,'span')){
    preg_match('/(.*?)<span class=\"(c.+?)\">(.+?)<\/span>(.*)/',$hit,$temp);
    array_shift($temp);
    $strres.=array_shift($temp);
    $class  =array_shift($temp);
    $str    =array_shift($temp);
    $hit    =array_shift($temp);
    if(!in_array($class,$classlist)) { $strres.=$str; }
  }
  $strres.=$hit;
  ###カンマが邪魔なので除去
  return str_replace(',','',$strres);
}
?>

出力(見にくかったのでExcelで勝手に加工しました)

yahoo.com 1 piczo.com 337 soundpedia.com 7234
live.com 3 match.com 446 friendsreunited.com 7339
myspace.com 6 flixster.com 541 downelink.com 7408
facebook.com 7 irc-galleria.net 547 livemocha.com 11514
hi5.com 8 imvu.com 620 ryze.com 13578
orkut.com 10 wayn.com 822 gather.com 14468
friendster.com 14 cyworld.com 929 librarything.com 17049
fotolog.com 16 fotki.com 964 xuqa.com 17740
skyrock.com 21 blackplanet.com 1153 profileheaven.com 20343
flickr.com 34 vampirefreaks.com 1302 eons.com 23548
livejournal.com 57 myyearbook.com 1424 aimpages.com 23582
netlog.com 69 meetup.com 1634 sconex.com 28996
iwiw.hu 87 classmates.com 1711 passado.com 30961
badoo.com 89 vox.com 1811 tagworld.com 53335
xanga.com 98 sulekha.com 1940 takingitglobal.org 59421
mixi.jp 103 faceparty.com 2012 blurty.com 70744
bebo.com 105 cardomain.com 2751 iknow.co.jp 71724
multiply.com 110 plaxo.com 2788 bolt.com 72399
rediff.com 124 nexopia.com 3354 gopetslive.com 91620
tagged.com 155 mobango.com 4124 mygamma.com 112565
imeem.com 157 43things.com 4240 dodgeball.com 179393
livedoor.com 162 reunion.com 5003 lang-8.com 422262
studivz.net 184 greatestjournal.com 5058 listography.com 426739
linkedin.com 196 care2.com 5165 jogabonito.com 1067026
hyves.nl 203 migente.com 5290 thestudentwiki.org 5540875
draugiem.lv 270 neurona.com 5293
stumbleupon.com 294 tribe.net 5471
last.fm 299 ecademy.com 6373
gaiaonline.com 309 lunarstorm.se 6424
grono.net 324 gree.jp 7042

trgtlist.txtには

facebook.com
myspace.com
orkut.com
...

のようにドメインを列記。
リストのソースは

http://www.socialnetworking.jp/archives/2006/09/post_521.html 世界のSNS

http://en.wikipedia.org/wiki/List_of_social_networking_websites Wikipedia

yahoo.comは1位に来てるけどこれはYahoo!360のランキングではない。
多分他にもそういうサイトがありそう。21位のskyrock.comもポータルだし。


もっと本格的にやるとして参考になりそうなものはこちら。

http://sho.tdiary.net/20051120.html#p02 Alexa Web Information Service (AWIS)を使ってみようとしてほぼ挫折中

http://oss.timedia.co.jp/show/%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E5%90%91%E4%B8%8A%E7%A7%98%E4%BC%9D/Alexa%E3%81%AE%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%81%AE%E6%AD%A3%E3%81%97%E3%81%84%E5%88%A9%E7%94%A8%E6%96%B9%E6%B3%95
Alexaのサービスの正しい利用方法

PHP初体験の感想

自分の環境では、Perlと比べて

  • Perlで思いつく表面的な処理はだいたいできそう
  • HTMLに埋め込める分テストは楽かな
  • Perlの$_みたいな空気読める奴がいなさげなのが残念
  • 関数名がいちいちエレガントじゃない
  • Perlのwarnings,strictみたいな手頃なデバッグ機能が見当たらない
  • セキュリティ脆弱のへんは要勉強

[misc]空想科学研究所からの年賀状

今年も来た。

中学くらいのときにファンレターを出したら、毎年送ってくるようになった。
周りにも結構読みふけってる人は多く「中高生の教養」みたいなブームになってたけど、自分は最近読んでないなぁ。

それだけ。

[misc]冬休み

既に1年の1/3を休みにとれる学生は冬休みなんてあってもなくても別にいいや、と思ってたけど、1週間ほど家にこもって何かやるってだけでもそれなりに収穫があったのでやっぱり冬休みに感謝。おかげでかなり目を傷めた気がするけど。

[misc]2008年の目標追加

  • 資産管理の徹底
    • Google Spreadsheetsで。海外に行く前はちゃんとつけてたけど、カナダドルやらUSドルやらロシアルーブルやら言ってる間に何がどうなってるのかわからなくなって結局やめた。Spreadsheetsも以前に比べてだいぶ操作性上がったし。

[hatena diary]はてダのsectioncategoryモジュールがうまく動いてない

せっかくエントリにカテゴリ付けしたのにサイドバーのカテゴリーに表示されてない。
どこをいじったらいいのか誰か教えてください。

[scheduling][GooSync][W-Zero3]GooSync復活

なんかGooSync復活してた。サポートチーム、「直してやったよ」とか何とか連絡よこせばいいのに。もしかしたらGoogle Calendarの問題かも。Google Calendar結構不安定だし(特に反復の予定をゴチャゴチャ編集したとき)。

デバイスはAdvancedにそのうち変えるかも。W-Zero3にしてから「携帯を携帯しない」人間になってしまった(まぁ些事に惑わされないという意味ではいい)。AdvancedはキーボードとWindows Mobileを残したままかなり小さくなってるみたい。それでPDFとかパワポとか見るのかなり辛そうだけど、何にしても携帯と名乗る以上は小さい方がいいや(おい)。