はてなキーワードで読み方を調べる

きっかけは arton さんのところにあった読み方ネタ.

LINQ本とか書く人がいたら、ぜひとも、リンクと読むとカタカナ表記をしておいて欲しいな。きっとリンキューとか口にする人がいて、最初何を話しているかわからないとかありそうだから。

P.I.Lはピルではなく、ピーアイエルと、少なくともジョンライドンは発音していたらしい。

そういえばはてなキーワードにふりがなデータがあったよなぁと思い出し,指定されたはてなキーワードの内容を読み取るコマンドを作ってみました.
久しぶりに PowerShell
参考は,はてなキーワード API の説明と id:coma2n さんの記事.

LINQ とは?

PS Z:\> xman LINQ

about        : http://d.hatena.ne.jp/keyword/LINQ
title        : LINQ
link         : http://d.hatena.ne.jp/keyword/LINQ
description  : ...<strong>LINQ</strong> Projectとは、.Net Framework上の「言語に統合されたクエリ」(Language-INtegrated Q
               uery)の拡張セットを指すコードネーム...
score        : 75
contentscore : 0
furigana     : りんく

りんく.

Gauche とは?

PS Z:\> xman Gauche

about        : http://d.hatena.ne.jp/keyword/Gauche
title        : Gauche
link         : http://d.hatena.ne.jp/keyword/Gauche
description  : 川合史朗さんによって開発されているR5RS準拠のオープンソースのScheme処理系。
               Perl、Ruby、Pythonなどのスクリプト言語のように、日常的に気軽に使える言語処理系となることを目標としている
               。(この目標は達成して...
score        : 80
contentscore : 0
furigana     : ごーしゅ

about        : http://d.hatena.ne.jp/keyword/rive%20gauche
title        : rive gauche
link         : http://d.hatena.ne.jp/keyword/rive%20gauche
description  : ...ポルテ (既製服) ライン.
               1 号店がパリのセーヌ川左岸 (rive <strong>gauche</strong>) に開設されたことから命名.
               2002 年,創業デザイナである...
score        : 100
contentscore : 0
furigana     : りう゛ごーしゅ

ごーしゅ.

Bjarne Stroustrup とは?

PS Z:\> xman "Bjarne Stroustrup"

about        : http://d.hatena.ne.jp/keyword/Bjarne%20Stroustrup
title        : Bjarne Stroustrup
link         : http://d.hatena.ne.jp/keyword/Bjarne%20Stroustrup
description  : プログラミング言語 C++ の創始者

               **代表書籍
               ISBN:475611895X:detail
score        : 100
contentscore : 0
furigana     : びゃーねすとぅるすとぅろぷ

びゃーねすとぅるすとぅろぷ.

C# とは?

PS Z:\> xman C#

about        : http://d.hatena.ne.jp/keyword/C%23
title        : C#
link         : http://d.hatena.ne.jp/keyword/C%23
description  : ...クトをつとめ、C++、Delphi、Javaなどの影響を受けて作られた。
               <strong>C#</strong>のコードはコンパイラによりMSIL(MicroSoft Intermediate Lang......行される。
              ヨーロッパの標準化団体であるECMAにより、ECMA-334 <strong>C#</strong> Language Specificationとして標準化
              されている。

               主なプラ......「C♯」と表記すべきかもしれないが、実際には「<strong>C#</strong>」と表記される。
               余談2。<strong>C#</strong>の「#」は「+」を4つ並べたイメージ、すなわち「C+...
score        : 68
contentscore : 71
furigana     : しーしゃーぷ

about        : http://d.hatena.ne.jp/keyword/pocket%20c%23
title        : pocket c#
link         : http://d.hatena.ne.jp/keyword/pocket%20c%23
description  : ...WindowsCEに移植された<strong>C#</strong>開発環境。
               http://pocketgcc.sourceforge.net/pcsharp/index.html...
score        : 100
contentscore : 0
furigana     : ぽけっとしーしゃーぷ

しーしゃーぷ.

P.I.L. とは?

PS Z:\> xman P.I.L.

about        : http://d.hatena.ne.jp/keyword/P%2eI%2eL%2e
title        : P.I.L.
link         : http://d.hatena.ne.jp/keyword/P%2eI%2eL%2e
description  : Public Image Ltd.
               Public Image Limited
               の略称。
score        : 100
contentscore : 0
furigana     : ぴーあいえる

ぴーあいえる.

ソースコード

使用したソースコードを以下に示します.はてなキーワード API は関係しそうなキーワードをスコア順に複数返してくることがあって,それが複数ページにわたったときのためのページング対策が必要かもですが,そこまではやってません.
Get-Keyword.ps1

param([string]$word)
if($args[0] -eq "-?" -or $word.Length -eq 0) {
    $commandName = [IO.Path]::GetFileNameWithoutExtension($MyInvocation.MyCommand.Name)
	Write-Host @"

Name:
    $commandName

Description:
    Get hatena keyword.

Usage:
    $commandName [[-word] <string>]

    -word <string>
        The word to retrieve.

"@ -foregroundColor Yellow
    exit 1
}
[void][Reflection.Assembly]::LoadWithPartialName("System.Web")
$enckeyword = [Web.HttpUtility]::UrlEncode($word)
$url = "http://search.hatena.ne.jp/keyword?word=$enckeyword&mode=rss&ie=utf8&page=1"
$webReq = [Net.HttpWebRequest]::Create($url)
$httpRes = $webReq.GetResponse()
if($httpRes.StatusCode -ne "OK") {
	Write-Error "The problem occurred while acquiring the response."
	exit 1
}
$resStream = $httpRes.GetResponseStream()
$resXml = [xml]((New-Object IO.StreamReader($resStream)).ReadToEnd())
$resStream.Close()
$resXml.GetElementsByTagName("item")

あとはお好みで Set-Alias xman Get-Keyword とでもして下さい.xman がイヤなら hman でも ultraman でもご自由に.

本当はしゃべらせたかった

本当は SpeechSynthesizer クラス で読み上げさせたかったのですが,Vista がデフォルトではひらがな読めない子なので断念.

追記

  • 2008年4月5日
    • 以下でキーワードとふりがな対応表が公開されている.定期的に更新されているらしい.