Created
October 26, 2009 05:32
-
-
Save yuroyoro/218447 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.lang.{String ⇒ 文字列} | |
import scala.{Int ⇒ 整数 , Double ⇒ 倍精度浮動小数点} | |
import scala.{List ⇒ リスト, Array ⇒ 配列} | |
import scala.xml.{XML ⇒ XMLオブジェクト, NodeSeq ⇒ ノードリスト} | |
import scala.io.{Source ⇒ ソース} | |
import scala.collection.immutable.{Map ⇒ マップ} | |
object LDRの購読数をドメイン毎に集計する{ | |
val opmlの場所= "http://reader.livedoor.com/user/%s/opml" | |
val ドメインを取り出す正規表現 = """http\:\/\/([^\/]+)\/.*$""".r | |
// まとめるドメイン | |
val ドメインのリスト= リスト("fc2.com", | |
"blogspot.com", | |
"g.hatena.ne.jp", | |
"tumblr.com", | |
"exblog.jp", | |
"justblog.jp", | |
"blog.so-net.ne.jp", | |
"ameba.jp", | |
"sakura.ne.jp", | |
"seesaa.net", | |
"cocolog-nifty.com") | |
def ちゃんとしたドメインにする( ドメイン:文字列 ):文字列 = | |
ドメインのリスト.find( ドメイン.endsWith( _ )).getOrElse( ドメイン) | |
def main( 引数:配列[文字列] ) = { | |
val opmlのURL = opmlの場所.format( 引数.first ) | |
val ソースオブジェクト = ソース.fromURL( opmlのURL ) | |
val opmlオブジェクト = XMLオブジェクト.loadString( ソースオブジェクト.getLines.mkString )// XML取得 | |
val フィードのリスト = opmlオブジェクト \ "body" \ "outline" \ "outline" \ "outline" | |
val 全件数:倍精度浮動小数点 = フィードのリスト.size | |
(Map.empty[文字列, 整数]/: フィードのリスト )( | |
(前のマップ:マップ[文字列, 整数] , フィード:ノードリスト) ⇒ { | |
(フィード \ "@xmlUrl" text ) match { | |
case ドメインを取り出す正規表現( dドメイン ) ⇒ | |
val ちゃんとしたドメイン = ちゃんとしたドメインにする( dドメイン ) | |
前のマップ + ( ちゃんとしたドメイン → ( 前のマップ.getOrElse(ちゃんとしたドメイン , 0) + 1 )) | |
case _ ⇒ 前のマップ | |
} | |
} | |
).toList.partition{ | |
case ( _, v件数)⇒ { | |
v件数 > 1 | |
} | |
} match { | |
case ( l二件以上のリスト, l一件だけのリスト) ⇒ { | |
l二件以上のリスト.sort{ | |
case ((_,v件数1), (_, v件数2)) ⇒ v件数1 > v件数2 | |
}.foreach{ | |
case (dドメイン, v件数) ⇒ { | |
println( "%-30s : %3d ( %2.2f )".format( dドメイン, v件数 , (v件数 / 全件数 * 100) )) | |
} | |
} | |
println( "%-30s : %3d ( %2.2f )".format( "Other", | |
l一件だけのリスト.size , (l一件だけのリスト.size / 全件数 * 100) )) | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment