「観たぞ!」の投稿ランキング

はじめに

たまたまこんなツイートを見かけたので。

集計してみた

観たぞ!というのはここのことです。

http://www.1101.com/london2012/

気分転換がてら集計してみました。結果は↓をクリック。

http://gachapin.jp/mitazo_20120811.txt

ランキング下位にはノイズが含まれていると思われるのでご注意を。(後述)

2012/08/11現在のトップ20をここで紹介しておきます。

(博多にわか) : 49
(ぬばたまの) : 31
(さややや) : 28
(大魔人先生) : 28
(ヤウヤウ) : 27
(世羅) : 27
(たっきー) : 25
(まさこ) : 21
(かのあ) : 19
(しまち) : 19
(サチック) : 18
(プロト) : 17
(北の庄) : 16
(はる) : 16
(もたぁん) : 14
(ぺけ) : 14
(もるぷい) : 13
(あしがる) : 13
(あっこOTJ) : 13
(bombobom) : 12

コード

書いたコードはこんな感じ。

var results = { } ;

function access( list ) {

  if( list.length == 0 ) {

    var array = [ ] ;
    for( var name in results ) {
      array.push( { name : name, count : results[ name ] } ) ;
    }
    var array2 = array.sort( function( a, b ) { return b.count - a.count ; } ) ;
    for( var i = 0; i < array2.length; i++ ) {
      console.log( array2[ i ].name + ' : ' + array2[ i ].count ) ;
    }
    return ;
  }

  var uri = list.pop( ) ;
  var xmlHttp = new XMLHttpRequest( ) ;
  xmlHttp.onreadystatechange = function( ) {
    if( xmlHttp.readyState == 4 && xmlHttp.status == 200 ) {
      var strs = xmlHttp.responseText.match( /(.+)/g ) ;
      for( var i = 0; i < strs.length; i++ ) {
        var name = strs[ i ] ;
        if( results[ name ] ) {
          results[ name ]++ ;
        } else {
          results[ name ] = 1 ;
        }
      }
      access( list ) ;
    }
  }
  xmlHttp.open( 'get', uri, true ) ;
  xmlHttp.send( null ) ;
}

var hrefs = document.getElementsByTagName( 'a' ) ;
var uris = [ ] ;
for( var i = 0; i < hrefs.length; i++ ) {
  if( hrefs[ i ].href.match( /2012-[0-9]{2}-[0-9]{2}\.html/ ) ) {
    uris.push( hrefs[ i ].href ) ;
  }
}
uris.push( 'http://www.1101.com/london2012/' ) ;
access( uris ) ;

/*
var results = { } ;
var texts = document.getElementsByClassName( 'mail_text' )

for( var i = 0; i < texts.length; i++ ) {
  var strs = texts[ i ].innerHTML.match( /(.+)/g ) ;
  for( var j = 0; j < strs.length; j++ ) {
    var name = strs[ j ] ;
    if( results[ name ] ) {
      results[ name ]++ ;
    } else {
      results[ name ] = 1 ;
    }
  }
}

for( var name in results ) {
  console.log( name + ' : ' + results[ name ] ) ;
}
*/

単純に(.+)("(", ")"は全角)で引っ掛けてます。([^)]+)の方がよかったと思うのですが、何となく[^]にマルチバイト文字を入れたくなかったので。文章中の(笑)とかにも引っかかりそうですが、ランキング上位を見る分には影響ないでしょう。

http://www.1101.com/london2012/

に移動してchromeで実行させると動きます。

JavaScriptは素人なので色々酷いコードですがご容赦を。(XMLHttpRequestによる連続アクセスは1秒くらい間隔を空けた方が良さげ)

終わりに

登場数を集計するという行為に問題がありましたらお知らせください。この記事を削除します。