Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yuroyoro/218447 to your computer and use it in GitHub Desktop.
Save yuroyoro/218447 to your computer and use it in GitHub Desktop.
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