<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Ruby on namaraii.com</title><link>https://namaraii.com/tags/ruby/</link><description>Recent content in Ruby on namaraii.com</description><generator>Hugo -- gohugo.io</generator><language>ja</language><managingEditor>hitoshi@namaraii.com (竹内 仁 (TAKEUCHI Hitoshi))</managingEditor><webMaster>hitoshi@namaraii.com (竹内 仁 (TAKEUCHI Hitoshi))</webMaster><copyright>© 2026 TAKEUCHI Hitoshi, All Rights Reserved.</copyright><lastBuildDate>Mon, 28 Jul 2025 09:19:37 +0900</lastBuildDate><atom:link href="https://namaraii.com/tags/ruby/index.xml" rel="self" type="application/rss+xml"/><item><title>radiko APIを使って都道府県ごとのラジオ局一覧を出力する</title><link>https://namaraii.com/posts/radiko-station-list/</link><pubDate>Mon, 28 Jul 2025 09:19:37 +0900</pubDate><author>hitoshi@namaraii.com (竹内 仁 (TAKEUCHI Hitoshi))</author><guid>https://namaraii.com/posts/radiko-station-list/</guid><description>&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-ruby" data-lang="ruby"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;net/http&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;uri&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;rexml/document&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;prefecture_names&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;1&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;北海道&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;2&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;青森県&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;3&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;岩手県&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;4&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;宮城県&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;5&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;秋田県&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;6&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;山形県&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;7&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;福島県&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;8&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;茨城県&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;9&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;栃木県&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;10&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;群馬県&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;11&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;埼玉県&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;12&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;千葉県&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;13&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;東京都&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;14&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;神奈川県&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;15&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;新潟県&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;16&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;富山県&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;17&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;石川県&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;18&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;福井県&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;19&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;山梨県&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;20&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;長野県&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;21&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;岐阜県&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;22&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;静岡県&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;23&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;愛知県&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;24&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;三重県&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;25&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;滋賀県&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;26&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;京都府&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;27&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;大阪府&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;28&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;兵庫県&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;29&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;奈良県&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;30&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;和歌山県&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;31&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;鳥取県&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;32&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;島根県&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;33&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;岡山県&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;34&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;広島県&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;35&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;山口県&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;36&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;徳島県&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;37&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;香川県&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;38&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;愛媛県&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;39&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;高知県&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;40&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;福岡県&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;41&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;佐賀県&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;42&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;長崎県&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;43&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;熊本県&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;44&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;大分県&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;45&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;宮崎県&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;46&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;鹿児島県&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;47&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;沖縄県&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;prefectures&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="mi"&gt;47&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="ss"&gt;:to_s&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;prefectures&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;each&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;pref_code&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://radiko.jp/v2/station/list/JP&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;pref_code&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.xml&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;uri&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;URI&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;begin&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Net&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;HTTP&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_response&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;uri&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;is_a?&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;Net&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;HTTPSuccess&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;document&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;REXML&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Document&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;body&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;## &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;prefecture_names&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;pref_code&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;(&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;pref_code&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;)&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;document&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;elements&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;each&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;stations/station&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;station&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;station_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;station&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;elements&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;name&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;].&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;station_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;station&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;elements&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;id&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;].&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;- &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;station_name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;(&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;station_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;)&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Failed to retrieve data for prefecture code &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;pref_code&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;rescue&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Error: &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; for prefecture code &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;pref_code&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;end&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 class="relative group"&gt;北海道(1)
 &lt;div id="北海道1" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%8c%97%e6%b5%b7%e9%81%931" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;ＨＢＣラジオ(HBC)&lt;/li&gt;
&lt;li&gt;ＳＴＶラジオ(STV)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第1(RN1)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第2(RN2)&lt;/li&gt;
&lt;li&gt;AIR-G&amp;rsquo;（FM北海道）(AIR-G)&lt;/li&gt;
&lt;li&gt;FM NORTH WAVE(NORTHWAVE)&lt;/li&gt;
&lt;li&gt;オーディオ高校野球(ABCR-KOSHIEN)&lt;/li&gt;
&lt;li&gt;NHKラジオ第1（札幌）(JOIK)&lt;/li&gt;
&lt;li&gt;NHK-FM（東京）(JOAK-FM)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;青森県(2)
 &lt;div id="青森県2" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e9%9d%92%e6%a3%ae%e7%9c%8c2" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;ＲＡＢ青森放送(RAB)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第1(RN1)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第2(RN2)&lt;/li&gt;
&lt;li&gt;エフエム青森(AFB)&lt;/li&gt;
&lt;li&gt;オーディオ高校野球(ABCR-KOSHIEN)&lt;/li&gt;
&lt;li&gt;NHKラジオ第1（仙台）(JOHK)&lt;/li&gt;
&lt;li&gt;NHK-FM（東京）(JOAK-FM)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;岩手県(3)
 &lt;div id="岩手県3" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%b2%a9%e6%89%8b%e7%9c%8c3" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;IBCラジオ(IBC)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第1(RN1)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第2(RN2)&lt;/li&gt;
&lt;li&gt;エフエム岩手(FMI)&lt;/li&gt;
&lt;li&gt;オーディオ高校野球(ABCR-KOSHIEN)&lt;/li&gt;
&lt;li&gt;NHKラジオ第1（仙台）(JOHK)&lt;/li&gt;
&lt;li&gt;NHK-FM（東京）(JOAK-FM)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;宮城県(4)
 &lt;div id="宮城県4" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%ae%ae%e5%9f%8e%e7%9c%8c4" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;TBCラジオ(TBC)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第1(RN1)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第2(RN2)&lt;/li&gt;
&lt;li&gt;Date fm エフエム仙台(DATEFM)&lt;/li&gt;
&lt;li&gt;オーディオ高校野球(ABCR-KOSHIEN)&lt;/li&gt;
&lt;li&gt;NHKラジオ第1（仙台）(JOHK)&lt;/li&gt;
&lt;li&gt;NHK-FM（東京）(JOAK-FM)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;秋田県(5)
 &lt;div id="秋田県5" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e7%a7%8b%e7%94%b0%e7%9c%8c5" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;ABSラジオ(ABS)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第1(RN1)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第2(RN2)&lt;/li&gt;
&lt;li&gt;エフエム秋田(AFM)&lt;/li&gt;
&lt;li&gt;オーディオ高校野球(ABCR-KOSHIEN)&lt;/li&gt;
&lt;li&gt;NHKラジオ第1（仙台）(JOHK)&lt;/li&gt;
&lt;li&gt;NHK-FM（東京）(JOAK-FM)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;山形県(6)
 &lt;div id="山形県6" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%b1%b1%e5%bd%a2%e7%9c%8c6" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;YBC山形放送(YBC)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第1(RN1)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第2(RN2)&lt;/li&gt;
&lt;li&gt;Rhythm Station　エフエム山形(RFM)&lt;/li&gt;
&lt;li&gt;オーディオ高校野球(ABCR-KOSHIEN)&lt;/li&gt;
&lt;li&gt;NHKラジオ第1（仙台）(JOHK)&lt;/li&gt;
&lt;li&gt;NHK-FM（東京）(JOAK-FM)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;福島県(7)
 &lt;div id="福島県7" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e7%a6%8f%e5%b3%b6%e7%9c%8c7" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;RFCラジオ福島(RFC)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第1(RN1)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第2(RN2)&lt;/li&gt;
&lt;li&gt;ふくしまFM(FMF)&lt;/li&gt;
&lt;li&gt;オーディオ高校野球(ABCR-KOSHIEN)&lt;/li&gt;
&lt;li&gt;NHKラジオ第1（仙台）(JOHK)&lt;/li&gt;
&lt;li&gt;NHK-FM（東京）(JOAK-FM)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;茨城県(8)
 &lt;div id="茨城県8" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e8%8c%a8%e5%9f%8e%e7%9c%8c8" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;TBSラジオ(TBS)&lt;/li&gt;
&lt;li&gt;文化放送(QRR)&lt;/li&gt;
&lt;li&gt;ニッポン放送(LFR)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第1(RN1)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第2(RN2)&lt;/li&gt;
&lt;li&gt;interfm(INT)&lt;/li&gt;
&lt;li&gt;TOKYO FM(FMT)&lt;/li&gt;
&lt;li&gt;J-WAVE(FMJ)&lt;/li&gt;
&lt;li&gt;LuckyFM 茨城放送(IBS)&lt;/li&gt;
&lt;li&gt;ラジオ日本(JORF)&lt;/li&gt;
&lt;li&gt;BAYFM78(BAYFM78)&lt;/li&gt;
&lt;li&gt;NACK5(NACK5)&lt;/li&gt;
&lt;li&gt;ＦＭヨコハマ(YFM)&lt;/li&gt;
&lt;li&gt;オーディオ高校野球(ABCR-KOSHIEN)&lt;/li&gt;
&lt;li&gt;NHKラジオ第1（東京）(JOAK)&lt;/li&gt;
&lt;li&gt;NHK-FM（東京）(JOAK-FM)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;栃木県(9)
 &lt;div id="栃木県9" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e6%a0%83%e6%9c%a8%e7%9c%8c9" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;TBSラジオ(TBS)&lt;/li&gt;
&lt;li&gt;文化放送(QRR)&lt;/li&gt;
&lt;li&gt;ニッポン放送(LFR)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第1(RN1)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第2(RN2)&lt;/li&gt;
&lt;li&gt;interfm(INT)&lt;/li&gt;
&lt;li&gt;TOKYO FM(FMT)&lt;/li&gt;
&lt;li&gt;J-WAVE(FMJ)&lt;/li&gt;
&lt;li&gt;CRT栃木放送(CRT)&lt;/li&gt;
&lt;li&gt;RADIO BERRY(RADIOBERRY)&lt;/li&gt;
&lt;li&gt;ラジオ日本(JORF)&lt;/li&gt;
&lt;li&gt;BAYFM78(BAYFM78)&lt;/li&gt;
&lt;li&gt;NACK5(NACK5)&lt;/li&gt;
&lt;li&gt;ＦＭヨコハマ(YFM)&lt;/li&gt;
&lt;li&gt;LuckyFM 茨城放送(IBS)&lt;/li&gt;
&lt;li&gt;オーディオ高校野球(ABCR-KOSHIEN)&lt;/li&gt;
&lt;li&gt;NHKラジオ第1（東京）(JOAK)&lt;/li&gt;
&lt;li&gt;NHK-FM（東京）(JOAK-FM)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;群馬県(10)
 &lt;div id="群馬県10" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e7%be%a4%e9%a6%ac%e7%9c%8c10" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;TBSラジオ(TBS)&lt;/li&gt;
&lt;li&gt;文化放送(QRR)&lt;/li&gt;
&lt;li&gt;ニッポン放送(LFR)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第1(RN1)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第2(RN2)&lt;/li&gt;
&lt;li&gt;interfm(INT)&lt;/li&gt;
&lt;li&gt;TOKYO FM(FMT)&lt;/li&gt;
&lt;li&gt;J-WAVE(FMJ)&lt;/li&gt;
&lt;li&gt;FM GUNMA(FMGUNMA)&lt;/li&gt;
&lt;li&gt;ラジオ日本(JORF)&lt;/li&gt;
&lt;li&gt;BAYFM78(BAYFM78)&lt;/li&gt;
&lt;li&gt;NACK5(NACK5)&lt;/li&gt;
&lt;li&gt;ＦＭヨコハマ(YFM)&lt;/li&gt;
&lt;li&gt;LuckyFM 茨城放送(IBS)&lt;/li&gt;
&lt;li&gt;オーディオ高校野球(ABCR-KOSHIEN)&lt;/li&gt;
&lt;li&gt;NHKラジオ第1（東京）(JOAK)&lt;/li&gt;
&lt;li&gt;NHK-FM（東京）(JOAK-FM)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;埼玉県(11)
 &lt;div id="埼玉県11" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%9f%bc%e7%8e%89%e7%9c%8c11" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;TBSラジオ(TBS)&lt;/li&gt;
&lt;li&gt;文化放送(QRR)&lt;/li&gt;
&lt;li&gt;ニッポン放送(LFR)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第1(RN1)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第2(RN2)&lt;/li&gt;
&lt;li&gt;interfm(INT)&lt;/li&gt;
&lt;li&gt;TOKYO FM(FMT)&lt;/li&gt;
&lt;li&gt;J-WAVE(FMJ)&lt;/li&gt;
&lt;li&gt;ラジオ日本(JORF)&lt;/li&gt;
&lt;li&gt;BAYFM78(BAYFM78)&lt;/li&gt;
&lt;li&gt;NACK5(NACK5)&lt;/li&gt;
&lt;li&gt;ＦＭヨコハマ(YFM)&lt;/li&gt;
&lt;li&gt;LuckyFM 茨城放送(IBS)&lt;/li&gt;
&lt;li&gt;オーディオ高校野球(ABCR-KOSHIEN)&lt;/li&gt;
&lt;li&gt;NHKラジオ第1（東京）(JOAK)&lt;/li&gt;
&lt;li&gt;NHK-FM（東京）(JOAK-FM)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;千葉県(12)
 &lt;div id="千葉県12" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%8d%83%e8%91%89%e7%9c%8c12" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;TBSラジオ(TBS)&lt;/li&gt;
&lt;li&gt;文化放送(QRR)&lt;/li&gt;
&lt;li&gt;ニッポン放送(LFR)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第1(RN1)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第2(RN2)&lt;/li&gt;
&lt;li&gt;interfm(INT)&lt;/li&gt;
&lt;li&gt;TOKYO FM(FMT)&lt;/li&gt;
&lt;li&gt;J-WAVE(FMJ)&lt;/li&gt;
&lt;li&gt;ラジオ日本(JORF)&lt;/li&gt;
&lt;li&gt;BAYFM78(BAYFM78)&lt;/li&gt;
&lt;li&gt;NACK5(NACK5)&lt;/li&gt;
&lt;li&gt;ＦＭヨコハマ(YFM)&lt;/li&gt;
&lt;li&gt;LuckyFM 茨城放送(IBS)&lt;/li&gt;
&lt;li&gt;オーディオ高校野球(ABCR-KOSHIEN)&lt;/li&gt;
&lt;li&gt;NHKラジオ第1（東京）(JOAK)&lt;/li&gt;
&lt;li&gt;NHK-FM（東京）(JOAK-FM)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;東京都(13)
 &lt;div id="東京都13" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e6%9d%b1%e4%ba%ac%e9%83%bd13" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;TBSラジオ(TBS)&lt;/li&gt;
&lt;li&gt;文化放送(QRR)&lt;/li&gt;
&lt;li&gt;ニッポン放送(LFR)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第1(RN1)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第2(RN2)&lt;/li&gt;
&lt;li&gt;interfm(INT)&lt;/li&gt;
&lt;li&gt;TOKYO FM(FMT)&lt;/li&gt;
&lt;li&gt;J-WAVE(FMJ)&lt;/li&gt;
&lt;li&gt;ラジオ日本(JORF)&lt;/li&gt;
&lt;li&gt;BAYFM78(BAYFM78)&lt;/li&gt;
&lt;li&gt;NACK5(NACK5)&lt;/li&gt;
&lt;li&gt;ＦＭヨコハマ(YFM)&lt;/li&gt;
&lt;li&gt;LuckyFM 茨城放送(IBS)&lt;/li&gt;
&lt;li&gt;オーディオ高校野球(ABCR-KOSHIEN)&lt;/li&gt;
&lt;li&gt;NHKラジオ第1（東京）(JOAK)&lt;/li&gt;
&lt;li&gt;NHK-FM（東京）(JOAK-FM)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;神奈川県(14)
 &lt;div id="神奈川県14" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e7%a5%9e%e5%a5%88%e5%b7%9d%e7%9c%8c14" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;TBSラジオ(TBS)&lt;/li&gt;
&lt;li&gt;文化放送(QRR)&lt;/li&gt;
&lt;li&gt;ニッポン放送(LFR)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第1(RN1)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第2(RN2)&lt;/li&gt;
&lt;li&gt;interfm(INT)&lt;/li&gt;
&lt;li&gt;TOKYO FM(FMT)&lt;/li&gt;
&lt;li&gt;J-WAVE(FMJ)&lt;/li&gt;
&lt;li&gt;ラジオ日本(JORF)&lt;/li&gt;
&lt;li&gt;BAYFM78(BAYFM78)&lt;/li&gt;
&lt;li&gt;NACK5(NACK5)&lt;/li&gt;
&lt;li&gt;ＦＭヨコハマ(YFM)&lt;/li&gt;
&lt;li&gt;LuckyFM 茨城放送(IBS)&lt;/li&gt;
&lt;li&gt;オーディオ高校野球(ABCR-KOSHIEN)&lt;/li&gt;
&lt;li&gt;NHKラジオ第1（東京）(JOAK)&lt;/li&gt;
&lt;li&gt;NHK-FM（東京）(JOAK-FM)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;新潟県(15)
 &lt;div id="新潟県15" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e6%96%b0%e6%bd%9f%e7%9c%8c15" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;ＢＳＮラジオ(BSN)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第1(RN1)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第2(RN2)&lt;/li&gt;
&lt;li&gt;FM NIIGATA(FMNIIGATA)&lt;/li&gt;
&lt;li&gt;オーディオ高校野球(ABCR-KOSHIEN)&lt;/li&gt;
&lt;li&gt;NHKラジオ第1（東京）(JOAK)&lt;/li&gt;
&lt;li&gt;NHK-FM（東京）(JOAK-FM)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;富山県(16)
 &lt;div id="富山県16" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%af%8c%e5%b1%b1%e7%9c%8c16" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;ＫＮＢラジオ(KNB)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第1(RN1)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第2(RN2)&lt;/li&gt;
&lt;li&gt;ＦＭとやま(FMTOYAMA)&lt;/li&gt;
&lt;li&gt;オーディオ高校野球(ABCR-KOSHIEN)&lt;/li&gt;
&lt;li&gt;NHKラジオ第1（名古屋）(JOCK)&lt;/li&gt;
&lt;li&gt;NHK-FM（東京）(JOAK-FM)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;石川県(17)
 &lt;div id="石川県17" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e7%9f%b3%e5%b7%9d%e7%9c%8c17" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;MROラジオ(MRO)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第1(RN1)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第2(RN2)&lt;/li&gt;
&lt;li&gt;エフエム石川(HELLOFIVE)&lt;/li&gt;
&lt;li&gt;オーディオ高校野球(ABCR-KOSHIEN)&lt;/li&gt;
&lt;li&gt;NHKラジオ第1（名古屋）(JOCK)&lt;/li&gt;
&lt;li&gt;NHK-FM（東京）(JOAK-FM)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;福井県(18)
 &lt;div id="福井県18" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e7%a6%8f%e4%ba%95%e7%9c%8c18" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;FBCラジオ(FBC)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第1(RN1)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第2(RN2)&lt;/li&gt;
&lt;li&gt;FM福井(FMFUKUI)&lt;/li&gt;
&lt;li&gt;オーディオ高校野球(ABCR-KOSHIEN)&lt;/li&gt;
&lt;li&gt;NHKラジオ第1（名古屋）(JOCK)&lt;/li&gt;
&lt;li&gt;NHK-FM（東京）(JOAK-FM)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;山梨県(19)
 &lt;div id="山梨県19" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%b1%b1%e6%a2%a8%e7%9c%8c19" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;ＹＢＳラジオ(YBS)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第1(RN1)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第2(RN2)&lt;/li&gt;
&lt;li&gt;FM FUJI(FM-FUJI)&lt;/li&gt;
&lt;li&gt;オーディオ高校野球(ABCR-KOSHIEN)&lt;/li&gt;
&lt;li&gt;NHKラジオ第1（東京）(JOAK)&lt;/li&gt;
&lt;li&gt;NHK-FM（東京）(JOAK-FM)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;長野県(20)
 &lt;div id="長野県20" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e9%95%b7%e9%87%8e%e7%9c%8c20" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;SBCラジオ(SBC)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第1(RN1)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第2(RN2)&lt;/li&gt;
&lt;li&gt;ＦＭ長野(FMN)&lt;/li&gt;
&lt;li&gt;オーディオ高校野球(ABCR-KOSHIEN)&lt;/li&gt;
&lt;li&gt;NHKラジオ第1（東京）(JOAK)&lt;/li&gt;
&lt;li&gt;NHK-FM（東京）(JOAK-FM)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;岐阜県(21)
 &lt;div id="岐阜県21" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%b2%90%e9%98%9c%e7%9c%8c21" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;CBCラジオ(CBC)&lt;/li&gt;
&lt;li&gt;TOKAI RADIO(TOKAIRADIO)&lt;/li&gt;
&lt;li&gt;ぎふチャン(GBS)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第1(RN1)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第2(RN2)&lt;/li&gt;
&lt;li&gt;ZIP-FM(ZIP-FM)&lt;/li&gt;
&lt;li&gt;ＦＭ ＧＩＦＵ(FMGIFU)&lt;/li&gt;
&lt;li&gt;FM AICHI(FMAICHI)&lt;/li&gt;
&lt;li&gt;オーディオ高校野球(ABCR-KOSHIEN)&lt;/li&gt;
&lt;li&gt;NHKラジオ第1（名古屋）(JOCK)&lt;/li&gt;
&lt;li&gt;NHK-FM（東京）(JOAK-FM)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;静岡県(22)
 &lt;div id="静岡県22" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e9%9d%99%e5%b2%a1%e7%9c%8c22" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;SBSラジオ(SBS)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第1(RN1)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第2(RN2)&lt;/li&gt;
&lt;li&gt;K-MIX(K-MIX)&lt;/li&gt;
&lt;li&gt;オーディオ高校野球(ABCR-KOSHIEN)&lt;/li&gt;
&lt;li&gt;NHKラジオ第1（名古屋）(JOCK)&lt;/li&gt;
&lt;li&gt;NHK-FM（東京）(JOAK-FM)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;愛知県(23)
 &lt;div id="愛知県23" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e6%84%9b%e7%9f%a5%e7%9c%8c23" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;CBCラジオ(CBC)&lt;/li&gt;
&lt;li&gt;TOKAI RADIO(TOKAIRADIO)&lt;/li&gt;
&lt;li&gt;ぎふチャン(GBS)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第1(RN1)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第2(RN2)&lt;/li&gt;
&lt;li&gt;ZIP-FM(ZIP-FM)&lt;/li&gt;
&lt;li&gt;FM AICHI(FMAICHI)&lt;/li&gt;
&lt;li&gt;オーディオ高校野球(ABCR-KOSHIEN)&lt;/li&gt;
&lt;li&gt;NHKラジオ第1（名古屋）(JOCK)&lt;/li&gt;
&lt;li&gt;NHK-FM（東京）(JOAK-FM)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;三重県(24)
 &lt;div id="三重県24" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e4%b8%89%e9%87%8d%e7%9c%8c24" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;CBCラジオ(CBC)&lt;/li&gt;
&lt;li&gt;TOKAI RADIO(TOKAIRADIO)&lt;/li&gt;
&lt;li&gt;ぎふチャン(GBS)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第1(RN1)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第2(RN2)&lt;/li&gt;
&lt;li&gt;ZIP-FM(ZIP-FM)&lt;/li&gt;
&lt;li&gt;レディオキューブ ＦＭ三重(FMMIE)&lt;/li&gt;
&lt;li&gt;FM AICHI(FMAICHI)&lt;/li&gt;
&lt;li&gt;オーディオ高校野球(ABCR-KOSHIEN)&lt;/li&gt;
&lt;li&gt;NHKラジオ第1（名古屋）(JOCK)&lt;/li&gt;
&lt;li&gt;NHK-FM（東京）(JOAK-FM)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;滋賀県(25)
 &lt;div id="滋賀県25" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e6%bb%8b%e8%b3%80%e7%9c%8c25" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;ABCラジオ(ABC)&lt;/li&gt;
&lt;li&gt;MBSラジオ(MBS)&lt;/li&gt;
&lt;li&gt;OBCラジオ大阪(OBC)&lt;/li&gt;
&lt;li&gt;FM COCOLO(CCL)&lt;/li&gt;
&lt;li&gt;FM802(802)&lt;/li&gt;
&lt;li&gt;FM大阪(FMO)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第1(RN1)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第2(RN2)&lt;/li&gt;
&lt;li&gt;KBS京都ラジオ(KBS)&lt;/li&gt;
&lt;li&gt;Kiss FM KOBE(KISSFMKOBE)&lt;/li&gt;
&lt;li&gt;e-radio FM滋賀(E-RADIO)&lt;/li&gt;
&lt;li&gt;ラジオ関西(CRK)&lt;/li&gt;
&lt;li&gt;α-STATION FM KYOTO(ALPHA-STATION)&lt;/li&gt;
&lt;li&gt;オーディオ高校野球(ABCR-KOSHIEN)&lt;/li&gt;
&lt;li&gt;NHKラジオ第1（大阪）(JOBK)&lt;/li&gt;
&lt;li&gt;NHK-FM（東京）(JOAK-FM)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;京都府(26)
 &lt;div id="京都府26" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e4%ba%ac%e9%83%bd%e5%ba%9c26" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;ABCラジオ(ABC)&lt;/li&gt;
&lt;li&gt;MBSラジオ(MBS)&lt;/li&gt;
&lt;li&gt;OBCラジオ大阪(OBC)&lt;/li&gt;
&lt;li&gt;FM COCOLO(CCL)&lt;/li&gt;
&lt;li&gt;FM802(802)&lt;/li&gt;
&lt;li&gt;FM大阪(FMO)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第1(RN1)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第2(RN2)&lt;/li&gt;
&lt;li&gt;KBS京都ラジオ(KBS)&lt;/li&gt;
&lt;li&gt;Kiss FM KOBE(KISSFMKOBE)&lt;/li&gt;
&lt;li&gt;α-STATION FM KYOTO(ALPHA-STATION)&lt;/li&gt;
&lt;li&gt;ラジオ関西(CRK)&lt;/li&gt;
&lt;li&gt;オーディオ高校野球(ABCR-KOSHIEN)&lt;/li&gt;
&lt;li&gt;NHKラジオ第1（大阪）(JOBK)&lt;/li&gt;
&lt;li&gt;NHK-FM（東京）(JOAK-FM)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;大阪府(27)
 &lt;div id="大阪府27" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%a4%a7%e9%98%aa%e5%ba%9c27" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;ABCラジオ(ABC)&lt;/li&gt;
&lt;li&gt;MBSラジオ(MBS)&lt;/li&gt;
&lt;li&gt;OBCラジオ大阪(OBC)&lt;/li&gt;
&lt;li&gt;FM COCOLO(CCL)&lt;/li&gt;
&lt;li&gt;FM802(802)&lt;/li&gt;
&lt;li&gt;FM大阪(FMO)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第1(RN1)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第2(RN2)&lt;/li&gt;
&lt;li&gt;Kiss FM KOBE(KISSFMKOBE)&lt;/li&gt;
&lt;li&gt;ラジオ関西(CRK)&lt;/li&gt;
&lt;li&gt;KBS京都ラジオ(KBS)&lt;/li&gt;
&lt;li&gt;α-STATION FM KYOTO(ALPHA-STATION)&lt;/li&gt;
&lt;li&gt;オーディオ高校野球(ABCR-KOSHIEN)&lt;/li&gt;
&lt;li&gt;NHKラジオ第1（大阪）(JOBK)&lt;/li&gt;
&lt;li&gt;NHK-FM（東京）(JOAK-FM)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;兵庫県(28)
 &lt;div id="兵庫県28" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%85%b5%e5%ba%ab%e7%9c%8c28" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;ABCラジオ(ABC)&lt;/li&gt;
&lt;li&gt;MBSラジオ(MBS)&lt;/li&gt;
&lt;li&gt;OBCラジオ大阪(OBC)&lt;/li&gt;
&lt;li&gt;FM COCOLO(CCL)&lt;/li&gt;
&lt;li&gt;FM802(802)&lt;/li&gt;
&lt;li&gt;FM大阪(FMO)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第1(RN1)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第2(RN2)&lt;/li&gt;
&lt;li&gt;ラジオ関西(CRK)&lt;/li&gt;
&lt;li&gt;Kiss FM KOBE(KISSFMKOBE)&lt;/li&gt;
&lt;li&gt;オーディオ高校野球(ABCR-KOSHIEN)&lt;/li&gt;
&lt;li&gt;NHKラジオ第1（大阪）(JOBK)&lt;/li&gt;
&lt;li&gt;NHK-FM（東京）(JOAK-FM)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;奈良県(29)
 &lt;div id="奈良県29" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%a5%88%e8%89%af%e7%9c%8c29" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;ABCラジオ(ABC)&lt;/li&gt;
&lt;li&gt;MBSラジオ(MBS)&lt;/li&gt;
&lt;li&gt;OBCラジオ大阪(OBC)&lt;/li&gt;
&lt;li&gt;FM COCOLO(CCL)&lt;/li&gt;
&lt;li&gt;FM802(802)&lt;/li&gt;
&lt;li&gt;FM大阪(FMO)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第1(RN1)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第2(RN2)&lt;/li&gt;
&lt;li&gt;Kiss FM KOBE(KISSFMKOBE)&lt;/li&gt;
&lt;li&gt;ラジオ関西(CRK)&lt;/li&gt;
&lt;li&gt;α-STATION FM KYOTO(ALPHA-STATION)&lt;/li&gt;
&lt;li&gt;オーディオ高校野球(ABCR-KOSHIEN)&lt;/li&gt;
&lt;li&gt;NHKラジオ第1（大阪）(JOBK)&lt;/li&gt;
&lt;li&gt;NHK-FM（東京）(JOAK-FM)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;和歌山県(30)
 &lt;div id="和歌山県30" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%92%8c%e6%ad%8c%e5%b1%b1%e7%9c%8c30" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;ABCラジオ(ABC)&lt;/li&gt;
&lt;li&gt;MBSラジオ(MBS)&lt;/li&gt;
&lt;li&gt;OBCラジオ大阪(OBC)&lt;/li&gt;
&lt;li&gt;FM COCOLO(CCL)&lt;/li&gt;
&lt;li&gt;FM802(802)&lt;/li&gt;
&lt;li&gt;FM大阪(FMO)&lt;/li&gt;
&lt;li&gt;wbs和歌山放送(WBS)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第1(RN1)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第2(RN2)&lt;/li&gt;
&lt;li&gt;Kiss FM KOBE(KISSFMKOBE)&lt;/li&gt;
&lt;li&gt;ラジオ関西(CRK)&lt;/li&gt;
&lt;li&gt;オーディオ高校野球(ABCR-KOSHIEN)&lt;/li&gt;
&lt;li&gt;NHKラジオ第1（大阪）(JOBK)&lt;/li&gt;
&lt;li&gt;NHK-FM（東京）(JOAK-FM)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;鳥取県(31)
 &lt;div id="鳥取県31" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e9%b3%a5%e5%8f%96%e7%9c%8c31" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;BSSラジオ(BSS)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第1(RN1)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第2(RN2)&lt;/li&gt;
&lt;li&gt;エフエム山陰(FM-SANIN)&lt;/li&gt;
&lt;li&gt;オーディオ高校野球(ABCR-KOSHIEN)&lt;/li&gt;
&lt;li&gt;NHKラジオ第1（広島）(JOFK)&lt;/li&gt;
&lt;li&gt;NHK-FM（東京）(JOAK-FM)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;島根県(32)
 &lt;div id="島根県32" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%b3%b6%e6%a0%b9%e7%9c%8c32" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;BSSラジオ(BSS)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第1(RN1)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第2(RN2)&lt;/li&gt;
&lt;li&gt;エフエム山陰(FM-SANIN)&lt;/li&gt;
&lt;li&gt;オーディオ高校野球(ABCR-KOSHIEN)&lt;/li&gt;
&lt;li&gt;NHKラジオ第1（広島）(JOFK)&lt;/li&gt;
&lt;li&gt;NHK-FM（東京）(JOAK-FM)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;岡山県(33)
 &lt;div id="岡山県33" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%b2%a1%e5%b1%b1%e7%9c%8c33" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;ＲＳＫラジオ(RSK)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第1(RN1)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第2(RN2)&lt;/li&gt;
&lt;li&gt;ＦＭ岡山(FM-OKAYAMA)&lt;/li&gt;
&lt;li&gt;オーディオ高校野球(ABCR-KOSHIEN)&lt;/li&gt;
&lt;li&gt;NHKラジオ第1（広島）(JOFK)&lt;/li&gt;
&lt;li&gt;NHK-FM（東京）(JOAK-FM)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;広島県(34)
 &lt;div id="広島県34" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%ba%83%e5%b3%b6%e7%9c%8c34" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;RCCラジオ(RCC)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第1(RN1)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第2(RN2)&lt;/li&gt;
&lt;li&gt;広島FM(HFM)&lt;/li&gt;
&lt;li&gt;オーディオ高校野球(ABCR-KOSHIEN)&lt;/li&gt;
&lt;li&gt;NHKラジオ第1（広島）(JOFK)&lt;/li&gt;
&lt;li&gt;NHK-FM（東京）(JOAK-FM)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;山口県(35)
 &lt;div id="山口県35" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%b1%b1%e5%8f%a3%e7%9c%8c35" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;ＫＲＹ山口放送(KRY)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第1(RN1)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第2(RN2)&lt;/li&gt;
&lt;li&gt;エフエム山口(FMY)&lt;/li&gt;
&lt;li&gt;オーディオ高校野球(ABCR-KOSHIEN)&lt;/li&gt;
&lt;li&gt;NHKラジオ第1（広島）(JOFK)&lt;/li&gt;
&lt;li&gt;NHK-FM（東京）(JOAK-FM)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;徳島県(36)
 &lt;div id="徳島県36" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%be%b3%e5%b3%b6%e7%9c%8c36" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;ＪＲＴ四国放送(JRT)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第1(RN1)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第2(RN2)&lt;/li&gt;
&lt;li&gt;FM徳島(FM807)&lt;/li&gt;
&lt;li&gt;オーディオ高校野球(ABCR-KOSHIEN)&lt;/li&gt;
&lt;li&gt;NHKラジオ第1（松山）(JOZK)&lt;/li&gt;
&lt;li&gt;NHK-FM（東京）(JOAK-FM)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;香川県(37)
 &lt;div id="香川県37" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e9%a6%99%e5%b7%9d%e7%9c%8c37" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;RNC西日本放送(RNC)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第1(RN1)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第2(RN2)&lt;/li&gt;
&lt;li&gt;エフエム香川(FMKAGAWA)&lt;/li&gt;
&lt;li&gt;オーディオ高校野球(ABCR-KOSHIEN)&lt;/li&gt;
&lt;li&gt;NHKラジオ第1（松山）(JOZK)&lt;/li&gt;
&lt;li&gt;NHK-FM（東京）(JOAK-FM)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;愛媛県(38)
 &lt;div id="愛媛県38" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e6%84%9b%e5%aa%9b%e7%9c%8c38" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;RNB南海放送(RNB)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第1(RN1)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第2(RN2)&lt;/li&gt;
&lt;li&gt;FM愛媛(JOEU-FM)&lt;/li&gt;
&lt;li&gt;オーディオ高校野球(ABCR-KOSHIEN)&lt;/li&gt;
&lt;li&gt;NHKラジオ第1（松山）(JOZK)&lt;/li&gt;
&lt;li&gt;NHK-FM（東京）(JOAK-FM)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;高知県(39)
 &lt;div id="高知県39" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e9%ab%98%e7%9f%a5%e7%9c%8c39" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;RKC高知放送(RKC)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第1(RN1)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第2(RN2)&lt;/li&gt;
&lt;li&gt;エフエム高知(HI-SIX)&lt;/li&gt;
&lt;li&gt;オーディオ高校野球(ABCR-KOSHIEN)&lt;/li&gt;
&lt;li&gt;NHKラジオ第1（松山）(JOZK)&lt;/li&gt;
&lt;li&gt;NHK-FM（東京）(JOAK-FM)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;福岡県(40)
 &lt;div id="福岡県40" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e7%a6%8f%e5%b2%a1%e7%9c%8c40" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;RKBラジオ(RKB)&lt;/li&gt;
&lt;li&gt;KBCラジオ(KBC)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第1(RN1)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第2(RN2)&lt;/li&gt;
&lt;li&gt;LOVE FM(LOVEFM)&lt;/li&gt;
&lt;li&gt;CROSS FM(CROSSFM)&lt;/li&gt;
&lt;li&gt;FM FUKUOKA(FMFUKUOKA)&lt;/li&gt;
&lt;li&gt;オーディオ高校野球(ABCR-KOSHIEN)&lt;/li&gt;
&lt;li&gt;NHKラジオ第1（福岡）(JOLK)&lt;/li&gt;
&lt;li&gt;NHK-FM（東京）(JOAK-FM)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;佐賀県(41)
 &lt;div id="佐賀県41" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e4%bd%90%e8%b3%80%e7%9c%8c41" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;ラジオNIKKEI第1(RN1)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第2(RN2)&lt;/li&gt;
&lt;li&gt;エフエム佐賀(FMS)&lt;/li&gt;
&lt;li&gt;NBCラジオ(NBC)&lt;/li&gt;
&lt;li&gt;RKBラジオ(RKB)&lt;/li&gt;
&lt;li&gt;KBCラジオ(KBC)&lt;/li&gt;
&lt;li&gt;オーディオ高校野球(ABCR-KOSHIEN)&lt;/li&gt;
&lt;li&gt;NHKラジオ第1（福岡）(JOLK)&lt;/li&gt;
&lt;li&gt;NHK-FM（東京）(JOAK-FM)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;長崎県(42)
 &lt;div id="長崎県42" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e9%95%b7%e5%b4%8e%e7%9c%8c42" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;NBCラジオ(NBC)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第1(RN1)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第2(RN2)&lt;/li&gt;
&lt;li&gt;FM長崎(FMNAGASAKI)&lt;/li&gt;
&lt;li&gt;オーディオ高校野球(ABCR-KOSHIEN)&lt;/li&gt;
&lt;li&gt;NHKラジオ第1（福岡）(JOLK)&lt;/li&gt;
&lt;li&gt;NHK-FM（東京）(JOAK-FM)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;熊本県(43)
 &lt;div id="熊本県43" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e7%86%8a%e6%9c%ac%e7%9c%8c43" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;RKKラジオ(RKK)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第1(RN1)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第2(RN2)&lt;/li&gt;
&lt;li&gt;FMKエフエム熊本(FMK)&lt;/li&gt;
&lt;li&gt;オーディオ高校野球(ABCR-KOSHIEN)&lt;/li&gt;
&lt;li&gt;NHKラジオ第1（福岡）(JOLK)&lt;/li&gt;
&lt;li&gt;NHK-FM（東京）(JOAK-FM)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;大分県(44)
 &lt;div id="大分県44" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%a4%a7%e5%88%86%e7%9c%8c44" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;OBSラジオ(OBS)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第1(RN1)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第2(RN2)&lt;/li&gt;
&lt;li&gt;エフエム大分(FM_OITA)&lt;/li&gt;
&lt;li&gt;オーディオ高校野球(ABCR-KOSHIEN)&lt;/li&gt;
&lt;li&gt;NHKラジオ第1（福岡）(JOLK)&lt;/li&gt;
&lt;li&gt;NHK-FM（東京）(JOAK-FM)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;宮崎県(45)
 &lt;div id="宮崎県45" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%ae%ae%e5%b4%8e%e7%9c%8c45" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;宮崎放送(MRT)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第1(RN1)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第2(RN2)&lt;/li&gt;
&lt;li&gt;エフエム宮崎(JOYFM)&lt;/li&gt;
&lt;li&gt;オーディオ高校野球(ABCR-KOSHIEN)&lt;/li&gt;
&lt;li&gt;NHKラジオ第1（福岡）(JOLK)&lt;/li&gt;
&lt;li&gt;NHK-FM（東京）(JOAK-FM)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;鹿児島県(46)
 &lt;div id="鹿児島県46" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e9%b9%bf%e5%85%90%e5%b3%b6%e7%9c%8c46" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;ＭＢＣラジオ(MBC)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第1(RN1)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第2(RN2)&lt;/li&gt;
&lt;li&gt;μＦＭ(MYUFM)&lt;/li&gt;
&lt;li&gt;オーディオ高校野球(ABCR-KOSHIEN)&lt;/li&gt;
&lt;li&gt;NHKラジオ第1（福岡）(JOLK)&lt;/li&gt;
&lt;li&gt;NHK-FM（東京）(JOAK-FM)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;沖縄県(47)
 &lt;div id="沖縄県47" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e6%b2%96%e7%b8%84%e7%9c%8c47" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;RBCiラジオ(RBC)&lt;/li&gt;
&lt;li&gt;ラジオ沖縄(ROK)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第1(RN1)&lt;/li&gt;
&lt;li&gt;ラジオNIKKEI第2(RN2)&lt;/li&gt;
&lt;li&gt;FM沖縄(FM_OKINAWA)&lt;/li&gt;
&lt;li&gt;オーディオ高校野球(ABCR-KOSHIEN)&lt;/li&gt;
&lt;li&gt;NHKラジオ第1（福岡）(JOLK)&lt;/li&gt;
&lt;li&gt;NHK-FM（東京）(JOAK-FM)&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Kindleの蔵書一覧を生成するRubyスクリプト</title><link>https://namaraii.com/posts/booklist_kindle/</link><pubDate>Thu, 08 May 2025 14:00:51 +0900</pubDate><author>hitoshi@namaraii.com (竹内 仁 (TAKEUCHI Hitoshi))</author><guid>https://namaraii.com/posts/booklist_kindle/</guid><description>&lt;p&gt;MacにインストールされているKindleアプリのデータから蔵書一覧を生成&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="codeblock-title"&gt;kindle_books_mac.rb&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-ruby" data-lang="ruby"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;rexml/document&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;date&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;csv&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Kindle for Mac&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="no"&gt;KINDLE_XML&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="no"&gt;ENV&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;HOME&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;/Library/Containers/com.amazon.Kindle/Data/Library/Application Support/Kindle/Cache/KindleSyncMetadataCache.xml&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;doc&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;REXML&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Document&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;File&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;read&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;KINDLE_XML&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;csv&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;CSV&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;generate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;force_quotes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kp"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;csv&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;doc&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;elements&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;each&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;//response/add_update_list/meta_data&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;csv&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;elements&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;ASIN&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;].&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;elements&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;title&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;].&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;elements&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;authors&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;].&lt;/span&gt;&lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;/&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;elements&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;publishers&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;].&lt;/span&gt;&lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;/&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;elements&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;publication_date&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;].&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;elements&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;purchase_date&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;].&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="n"&gt;csv&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>Appleのヘルスケアデータから体重を抜き出してCSVファイルを作成する</title><link>https://namaraii.com/posts/apple_healthcare_data/</link><pubDate>Wed, 11 Dec 2024 00:00:00 +0900</pubDate><author>hitoshi@namaraii.com (竹内 仁 (TAKEUCHI Hitoshi))</author><guid>https://namaraii.com/posts/apple_healthcare_data/</guid><description>&lt;p&gt;Appleのヘルスケアアプリのデータを使って､他のアプリでグラフを描こうと思ったが､エクスポートされるデータはXMLのため､そのままでは扱いにくい。&lt;/p&gt;
&lt;p&gt;このため､XMLファイルから体重データを抜き出してCSVを出力するRubyスクリプトを書いた。&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-ruby" data-lang="ruby"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;nokogiri&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;date&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;reader&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Nokogiri&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;XML&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Reader&lt;/span&gt; &lt;span class="no"&gt;File&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;read&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;export.xml&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;[]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;reader&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;each&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Record&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;attributes&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;type&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;HKQuantityTypeIdentifierBodyMass&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;d&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Date&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;attributes&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;startDate&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;strftime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;%Y-%m-%d&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;attributes&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;value&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;end&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sort&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;each&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;,&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;=begin
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;&amp;lt;Record type=&amp;#34;HKQuantityTypeIdentifierBodyMass&amp;#34; sourceName=&amp;#34;1byone Health&amp;#34; sourceVersion=&amp;#34;63&amp;#34; device=&amp;#34;&amp;amp;lt;&amp;amp;lt;HKDevice: 0x3013e9b30&amp;amp;gt;, name:iPhone, manufacturer:Apple, model:iPhone, hardware:iPhone, firmware:iPhone, software:17.5.1, localIdentifier:ja_JP, UDIDeviceIdentifier:ja_JP, creation date:2024-06-02 22:17:36 +0000&amp;amp;gt;&amp;#34; unit=&amp;#34;kg&amp;#34; creationDate=&amp;#34;2024-06-17 07:17:17 +0900&amp;#34; startDate=&amp;#34;2024-06-17 07:17:17 +0900&amp;#34; endDate=&amp;#34;2024-06-17 07:17:17 +0900&amp;#34; value=&amp;#34;71.9&amp;#34;/&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;=end&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;以下､ChatGPTにヘルスケアデータの構造を聞いた回答&lt;/p&gt;
&lt;p&gt;Appleのヘルスケアアプリでエクスポートされるデータは、&lt;strong&gt;XML (Extensible Markup Language)&lt;/strong&gt; フォーマットで提供されます。このフォーマットは、ヘルスデータを構造化して格納するための標準的な形式です。&lt;/p&gt;

&lt;h3 class="relative group"&gt;データの構造と内容
 &lt;div id="データの構造と内容" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e3%83%87%e3%83%bc%e3%82%bf%e3%81%ae%e6%a7%8b%e9%80%a0%e3%81%a8%e5%86%85%e5%ae%b9" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;XMLヘッダー&lt;/strong&gt; エクスポートされたファイルは、XMLヘッダーから始まります。&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;&amp;lt;?xml version=&amp;#34;1.0&amp;#34; encoding=&amp;#34;UTF-8&amp;#34;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;全体のルート要素&lt;/strong&gt; データ全体は &lt;code&gt;&amp;lt;HealthData&amp;gt;&lt;/code&gt; というルート要素でラップされています。&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;HealthData&lt;/span&gt; &lt;span class="na"&gt;locale=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;en_US&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ...
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;/HealthData&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;データの各エントリー&lt;/strong&gt; ヘルスケアのデータは、それぞれの記録を &lt;code&gt;&amp;lt;Record&amp;gt;&lt;/code&gt; 要素として格納します。主な属性は以下の通りです：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;type&lt;/strong&gt;: データの種類（例: 歩数、心拍数など）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;sourceName&lt;/strong&gt;: データのソース名（iPhone、Apple Watchなど）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;sourceVersion&lt;/strong&gt;: ソースのバージョン情報。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;unit&lt;/strong&gt;: データの単位（例: &lt;code&gt;count&lt;/code&gt;, &lt;code&gt;bpm&lt;/code&gt;, &lt;code&gt;kcal&lt;/code&gt; など）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;creationDate&lt;/strong&gt;: データが作成された日時。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;startDate&lt;/strong&gt;: データの開始日時（測定期間の開始）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;endDate&lt;/strong&gt;: データの終了日時（測定期間の終了）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;value&lt;/strong&gt;: データの値（例: 歩数の数値、体重の値など）。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;例:&lt;/p&gt;</description></item><item><title>Pomera DM250</title><link>https://namaraii.com/posts/pomera_dm250/</link><pubDate>Wed, 04 Sep 2024 00:00:00 +0900</pubDate><author>hitoshi@namaraii.com (竹内 仁 (TAKEUCHI Hitoshi))</author><guid>https://namaraii.com/posts/pomera_dm250/</guid><description>&lt;p&gt;Pomera DM250は、デジタルメモツールとして人気のある「Pomera」シリーズの最新モデル。&lt;/p&gt;
&lt;p&gt;Pomeraシリーズはキングジム社が製造する、主にテキスト入力に特化したポータブルデバイスで、ノートパソコンと同様のフルキーボードを備えていますが、インターネットや複雑なアプリケーションの使用を排除し、シンプルな文書作成に特化している。&lt;/p&gt;

&lt;h2 class="relative group"&gt;Pomera DM250とファイルをやり取りする方法
 &lt;div id="pomera-dm250とファイルをやり取りする方法" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#pomera-dm250%e3%81%a8%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e3%82%92%e3%82%84%e3%82%8a%e5%8f%96%e3%82%8a%e3%81%99%e3%82%8b%e6%96%b9%e6%b3%95" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;方法&lt;/th&gt;
 &lt;th&gt;手順&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;SDカード経由&lt;/td&gt;
 &lt;td&gt;SDカードを抜き差し&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;USBケーブルでPCと接続しストレージとして認識させる&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;ツール&lt;/code&gt;→&lt;code&gt;PCリンク&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;スマホアプリPomera Link経由でファイルを送受信する&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;ツール&lt;/code&gt;→&lt;code&gt;アプリ接続&lt;/code&gt; または &lt;code&gt;ツール&lt;/code&gt;→&lt;code&gt;QRコード&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Wi-Fiに接続しGmailでファイルを送信する&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;ツール&lt;/code&gt;→&lt;code&gt;アップロード&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 class="relative group"&gt;内部のディレクトリ構造
 &lt;div id="内部のディレクトリ構造" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%86%85%e9%83%a8%e3%81%ae%e3%83%87%e3%82%a3%e3%83%ac%e3%82%af%e3%83%88%e3%83%aa%e6%a7%8b%e9%80%a0" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;

&lt;h3 class="relative group"&gt;本体メモリ
 &lt;div id="本体メモリ" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e6%9c%ac%e4%bd%93%e3%83%a1%e3%83%a2%e3%83%aa" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;Pomera本体ストレージはMacのFinderからボリューム名をPOMERAに変更した。&lt;/p&gt;
&lt;p&gt;/dev/disk10 on /Volumes/POMERA (msdos, local, nodev, nosuid, noowners, noatime, fskit)&lt;/p&gt;
&lt;pre class="not-prose mermaid"&gt;
flowchart TD
 A[／Volumes／POMERA] --&gt; |本体メモリのメモ|B(Pomera)
 B --&gt; C(ファイル名.txt)
 B --&gt; G(フォルダ名)
 A --&gt; |カレンダーメモ| D(Pomera_memo)
 D --&gt; E(YYYY)
 E --&gt; F[YYYYMMDD.txt]
 
&lt;/pre&gt;


&lt;h3 class="relative group"&gt;SDカード
 &lt;div id="sdカード" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#sd%e3%82%ab%e3%83%bc%e3%83%89" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;PomeraのSDカードはMacのFinderからボリューム名をPOMERA_SDに変更した。&lt;/p&gt;</description></item><item><title>RubyからBlueskyへの投稿</title><link>https://namaraii.com/posts/ruby_bskyrb/</link><pubDate>Thu, 22 Aug 2024 00:00:00 +0900</pubDate><author>hitoshi@namaraii.com (竹内 仁 (TAKEUCHI Hitoshi))</author><guid>https://namaraii.com/posts/ruby_bskyrb/</guid><description>&lt;p&gt;作成しているツールでRubyからBlueskyへ投稿したかったので､&lt;a href="https://github.com/ShreyanJain9/bskyrb" target="_blank" rel="noreferrer"&gt;ShreyanJain9/bskyrb: Ruby Gem for interacting with BlueSky/AT Protocol&lt;/a&gt;というライブラリを使うことにした。&lt;/p&gt;
&lt;p&gt;使用例を見ると､&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-ruby" data-lang="ruby"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;bskyrb&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;username&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;your_username&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;password&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;your_password&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;pds_url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;https://bsky.social&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;credentials&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Bskyrb&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Credentials&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;username&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;password&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;session&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Bskyrb&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Session&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;credentials&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;pds_url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;bsky&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Bskyrb&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;RecordManager&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;post_uri&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;bsky&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create_post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Hello world from bskyrb!&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;uri&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;bsky&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;like&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;post_uri&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;bsky&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;repost&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;post_uri&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;bsky&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create_reply&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;post_uri&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Replying to post from bskyrb&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;とあり､一見簡単そうに見えるがBlueskyの場合はXやMastodonのAPIとは異なり､投稿するメッセージの中に､&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;URLがあってもリンクは設定されない&lt;/li&gt;
&lt;li&gt;ハッシュタグがあってもリンクは設定されない&lt;/li&gt;
&lt;li&gt;URLのコンテンツにOGBタグがあってもリンクカードは表示されない&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;という仕様であり､なかなか面倒であることがわかった。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://zenn.dev/tmtms/articles/202306-bskyrb" target="_blank" rel="noreferrer"&gt;Ruby から Bluesky に投稿してみる&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.bsky.app/docs/advanced-guides/post-richtext" target="_blank" rel="noreferrer"&gt;Links, mentions, and rich text | Bluesky&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;そんなわけで上記のドキュメントを参照しつつ､それぞれどうやれば良いのか調べてみた。&lt;/p&gt;

&lt;h2 class="relative group"&gt;リンクの設定
 &lt;div id="リンクの設定" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e3%83%aa%e3%83%b3%e3%82%af%e3%81%ae%e8%a8%ad%e5%ae%9a" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;メッセージ中にURLがあれば､その部分を自動的にリンク設定したかったため､&lt;a href="https://docs.bsky.app/docs/advanced-guides/post-richtext#rich-text-facets" target="_blank" rel="noreferrer"&gt;Rich text facets&lt;/a&gt;の例にある以下の例を参考に､&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;pre tabindex="0"&gt;&lt;code class="language-json-ld" data-lang="json-ld"&gt;{
 text: &amp;#39;Go to this site&amp;#39;,
 facets: [
 {
 index: {
 byteStart: 6,
 byteEnd: 15
 },
 features: [{
 $type: &amp;#39;app.bsky.richtext.facet#link&amp;#39;,
 uri: &amp;#39;https://example.com&amp;#39;
 }]
 }
 ]
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;以下のようなコードでfacetを作成した。&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-ruby" data-lang="ruby"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;create_facets_for_urls&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;facets&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;[]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;text_copy&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dup&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="no"&gt;URI&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;extract&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text_copy&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;http&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;https&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;each&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;byte_start&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;text_copy&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;text_copy&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;].&lt;/span&gt;&lt;span class="n"&gt;encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;UTF-8&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;bytesize&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;byte_end&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;byte_start&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;bytesize&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;facets&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;index&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;byteStart&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;byte_start&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;byteEnd&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;byte_end&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;features&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;uri&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s1"&gt;&amp;#39;$type&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;app.bsky.richtext.facet#link&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;text_copy&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="n"&gt;text_copy&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;index&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;length&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="se"&gt;\0&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;length&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;facets&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;end&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h2 class="relative group"&gt;ハッシュタグの設定
 &lt;div id="ハッシュタグの設定" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e3%83%8f%e3%83%83%e3%82%b7%e3%83%a5%e3%82%bf%e3%82%b0%e3%81%ae%e8%a8%ad%e5%ae%9a" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;メッセージ中にハッシュタグがあれば､その部分を自動的にリンク設定したかったため､同じようなロジックでfacetを作成する。&lt;/p&gt;</description></item><item><title>Platypus - RubyスクリプトをMac OSのアプリに変換できるツール</title><link>https://namaraii.com/posts/platypus/</link><pubDate>Mon, 20 Nov 2023 00:00:00 +0900</pubDate><author>hitoshi@namaraii.com (竹内 仁 (TAKEUCHI Hitoshi))</author><guid>https://namaraii.com/posts/platypus/</guid><description>&lt;p&gt;&lt;a href="https://github.com/sveinbjornt/Platypus" target="_blank" rel="noreferrer"&gt;sveinbjornt/Platypus: Create native Mac applications from command line scripts.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;スクリプト（Shellスクリプト、Perl、Python、Rubyなど）を標準のMac OS Xアプリケーション（.app）に変換するツール。&lt;/p&gt;
&lt;p&gt;Platypusを使用すると、コマンドラインやターミナルを介さずに、スクリプトを直接実行可能なアプリケーションとして実行できる。&lt;/p&gt;
&lt;p&gt;生成されるappのinfo.plistを編集することで､スクリプトをURLスキームに対応させることができる。&lt;/p&gt;
&lt;p&gt;RubyではURLスキームで指定された文字列へ&lt;code&gt;ARGV&lt;/code&gt;でアクセスできた。&lt;/p&gt;</description></item><item><title>OAuthでアクセストークンを取得するスクリプト</title><link>https://namaraii.com/posts/oauth_access_token/</link><pubDate>Sat, 15 Jul 2023 00:00:00 +0900</pubDate><author>hitoshi@namaraii.com (竹内 仁 (TAKEUCHI Hitoshi))</author><guid>https://namaraii.com/posts/oauth_access_token/</guid><description>&lt;p&gt;OAuthでアクセストークン、アクセストークンシークレットを取得するサンプル。毎回、同じようなスクリプトを書いて使い捨てにするのはムダなのでメモしておく。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;ブラウザで表示されるURLへアクセスする&lt;/li&gt;
&lt;li&gt;リダイレクトされたURLの&lt;code&gt;oauth_verifier&lt;/code&gt;の値を入力&lt;/li&gt;
&lt;li&gt;&lt;code&gt;access_token.token&lt;/code&gt;、&lt;code&gt;access_token.secret&lt;/code&gt;が表示される&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-ruby" data-lang="ruby"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;oauth&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="no"&gt;URL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://www.tumblr.com&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;consumer_key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Cls**********yaqV4&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;consumer_secret&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;RG****3KwFy&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;oauth&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;OAuth&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Consumer&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;consumer_key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;consumer_secret&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;site&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="no"&gt;URL&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;request&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;oauth&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_request_token&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;exclude_callback&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kp"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Access this URL: &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;authorize_url&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;oauth_verifier: &amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;verifier&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;gets&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chomp&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;access_token&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_access_token&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;oauth_verifier&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;verifier&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;pp&lt;/span&gt; &lt;span class="n"&gt;access_token&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item><item><title>Webページから本文らしき部分を抽出する</title><link>https://namaraii.com/posts/extract_content_from_webpage/</link><pubDate>Tue, 17 Jan 2023 00:00:00 +0900</pubDate><author>hitoshi@namaraii.com (竹内 仁 (TAKEUCHI Hitoshi))</author><guid>https://namaraii.com/posts/extract_content_from_webpage/</guid><description>&lt;p&gt;さまざまなパターンの日本語文章をデータとして欲しいケースがあったので、指定したURLから本文らしき内容を抽出するスクリプトを書いた。&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;span class="lnt"&gt;18
&lt;/span&gt;&lt;span class="lnt"&gt;19
&lt;/span&gt;&lt;span class="lnt"&gt;20
&lt;/span&gt;&lt;span class="lnt"&gt;21
&lt;/span&gt;&lt;span class="lnt"&gt;22
&lt;/span&gt;&lt;span class="lnt"&gt;23
&lt;/span&gt;&lt;span class="lnt"&gt;24
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-ruby" data-lang="ruby"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;playwright&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;readability&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;html2text&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 指定したURLから本文らしき内容を抽出して返却する&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;html2text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="no"&gt;Playwright&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;playwright_cli_executable_path&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;npx playwright&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;playwright&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;playwright&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chromium&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;launch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;headless&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kp"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;browser&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;begin&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;page&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;browser&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;new_page&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;goto&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;waitUntil&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;load&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;doc&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;Readability&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Document&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;new&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;sleep&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="ss"&gt;:title&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:content&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="no"&gt;Html2Text&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;convert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;doc&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	 &lt;span class="k"&gt;rescue&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="ss"&gt;:title&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="kp"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:content&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="kp"&gt;nil&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;ARGV&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;shift&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;doc&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;html2text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;doc&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:title&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="n"&gt;doc&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:content&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Javascriptでコンテンツを生成するページに対応するため&lt;a href="https://github.com/microsoft/playwright" target="_blank" rel="noreferrer"&gt;Playwright&lt;/a&gt;を使用。&lt;/p&gt;

&lt;h2 class="relative group"&gt;使用したライブラリ
 &lt;div id="使用したライブラリ" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e4%bd%bf%e7%94%a8%e3%81%97%e3%81%9f%e3%83%a9%e3%82%a4%e3%83%96%e3%83%a9%e3%83%aa" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/cantino/ruby-readability" target="_blank" rel="noreferrer"&gt;cantino/ruby-readability: Port of arc90&amp;rsquo;s readability project to Ruby&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/YusukeIwaki/playwright-ruby-client" target="_blank" rel="noreferrer"&gt;YusukeIwaki/playwright-ruby-client: Playwright client for Ruby&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/soundasleep/html2text_ruby" target="_blank" rel="noreferrer"&gt;soundasleep/html2text_ruby: A Ruby component to convert HTML into a plain text format.&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>2ホップリンク</title><link>https://namaraii.com/posts/twohop_link/</link><pubDate>Thu, 22 Dec 2022 00:00:00 +0900</pubDate><author>hitoshi@namaraii.com (竹内 仁 (TAKEUCHI Hitoshi))</author><guid>https://namaraii.com/posts/twohop_link/</guid><description>&lt;h2 class="relative group"&gt;ホップ数
 &lt;div id="ホップ数" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e3%83%9b%e3%83%83%e3%83%97%e6%95%b0" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;&lt;pre class="not-prose mermaid"&gt;
flowchart LR
	B1 &amp; B2 --&gt; A
	G --&gt; O1
	H --&gt; O1
	A --&gt; O1 &amp; O2
	O2 --&gt; E
	F --&gt; O2
	B1:::hop1
	B2:::hop1
	O1:::hop1
	O2:::hop1
	F:::hop2
	G:::hop2
	H:::hop2
	style A fill:#f9f,stroke:#333,stroke-width:4px
	classDef hop1 fill:#a9a
	classDef hop2 fill:#f96
&lt;/pre&gt;

ホップ数とは自身から任意のページまでたどり着くまでのリンクの数である。&lt;/p&gt;
&lt;p&gt;このようなリンク関係がある場合、ページ&lt;code&gt;A&lt;/code&gt;から見て、&lt;code&gt;B1&lt;/code&gt; &lt;code&gt;B2&lt;/code&gt; &lt;code&gt;O1&lt;/code&gt; &lt;code&gt;O2&lt;/code&gt;は1ホップリンクと呼ばれる。&lt;/p&gt;

&lt;h2 class="relative group"&gt;2ホップリンクの意味
 &lt;div id="2ホップリンクの意味" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#2%e3%83%9b%e3%83%83%e3%83%97%e3%83%aa%e3%83%b3%e3%82%af%e3%81%ae%e6%84%8f%e5%91%b3" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;このため、上記のリンク関係で言えば、ページ&lt;code&gt;A&lt;/code&gt;から見た&lt;code&gt;G&lt;/code&gt; &lt;code&gt;H&lt;/code&gt; &lt;code&gt;E&lt;/code&gt; &lt;code&gt;F&lt;/code&gt;は2ホップリンクとなる。&lt;/p&gt;
&lt;p&gt;Scrapboxでは2ホップリンクの内、アウトゴーイングリンクのページへリンクしているページ、つまり、&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;A&lt;/code&gt;からリンクしている&lt;code&gt;O1&lt;/code&gt;へリンクしている &lt;code&gt;G&lt;/code&gt;と &lt;code&gt;H&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;A&lt;/code&gt;からリンクしている&lt;code&gt;O2&lt;/code&gt;へリンクしている &lt;code&gt;F&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;を関連リンクとして表示している。これは、&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;A→C, B→Cという&lt;a href="https://helpfeel.com/masui/%E3%83%AA%E3%83%B3%E3%82%AF" target="_blank" rel="noreferrer"&gt;リンク&lt;/a&gt;が存在するとき、AとBの間にはなんらかの関連があると考えてよい。&lt;/p&gt;
&lt;p&gt;「和歌山」→「みかん」、「愛媛県」→「みかん」 ならば「和歌山県」と「愛媛県」はみかんつながりになっているわけだし、&lt;/p&gt;
&lt;p&gt;「増井」→「Rubyプログラミング」、「高林」→「Rubyプログラミング」 ならば「増井」⇔「高林」は意味がある。&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;出典: &lt;a href="https://helpfeel.com/masui/2%E3%83%9B%E3%83%83%E3%83%97%E3%83%AA%E3%83%B3%E3%82%AF%E3%81%AE%E8%80%83%E5%AF%9F-5b6f9e74b1b77e00148f8c42" target="_blank" rel="noreferrer"&gt;2ホップリンクの考察 - 増井俊之&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;上記の考え方に基づく仕様であり、本サイトでもQuartzを拡張し同様の2ホップリンクを表示している（各ページ配下の「関連リンク」）&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;QuartzにScrapbox的な2ホップリンクを追加する&lt;/li&gt;
&lt;li&gt;Obsidiaのリンク表示&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;参考情報
 &lt;div id="参考情報" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%e5%8f%82%e8%80%83%e6%83%85%e5%a0%b1" aria-label="アンカー"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://helpfeel.com/masui/2%E3%83%9B%E3%83%83%E3%83%97%E3%83%AA%E3%83%B3%E3%82%AF%E3%81%AE%E8%80%83%E5%AF%9F-5b6f9e74b1b77e00148f8c42" target="_blank" rel="noreferrer"&gt;2ホップリンクの考察 - 増井俊之&lt;/a&gt;&lt;/p&gt;</description></item><item><title>指定したWebページをMarkdownへ変換するRubyスクリプト</title><link>https://namaraii.com/posts/html2markdown_ruby/</link><pubDate>Thu, 22 Dec 2022 00:00:00 +0900</pubDate><author>hitoshi@namaraii.com (竹内 仁 (TAKEUCHI Hitoshi))</author><guid>https://namaraii.com/posts/html2markdown_ruby/</guid><description>&lt;p&gt;指定したWebページをMarkdownへ変換するRubyスクリプト&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-ruby" data-lang="ruby"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;reverse_markdown&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;open-uri&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="no"&gt;ReverseMarkdown&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;config&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;unknown_tags&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="ss"&gt;:bypass&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;github_flavored&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kp"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tag_border&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;usage&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;usage: &lt;/span&gt;&lt;span class="si"&gt;#{&lt;/span&gt;&lt;span class="vg"&gt;$0&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; uri&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;exit&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;usage&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="no"&gt;ARGV&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;html&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="no"&gt;OpenURI&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;open_uri&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;ARGV&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;shift&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;read&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt; &lt;span class="no"&gt;ReverseMarkdown&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;convert&lt;/span&gt; &lt;span class="n"&gt;html&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description></item></channel></rss>