『☆ピコピコプラネット☆』が誕生しました
この記事は、アイドルマスター Advent Calendar 2019 の 2 日目の記事です。
この記事では、先日公開した『☆ピコピコプラネット☆』の紹介をさせていただきたいと思います。
『☆ピコピコプラネット☆』とは?
『☆ピコピコプラネット☆』は、『アイドルマスター ミリオンライブ!』の情報を Linked Open Data(LOD)によって提供する非公式のオープンデータプラットフォームです。
例えば、ランティスのミリオンライブのページを見に行けばアルバム情報が手に入りますが、人間が読むために書かれた内容であり、機械が読むためにはひと手間が必要です。
『☆ピコピコプラネット☆』では、こういった情報を RDF というメタデータを記述するための統一された枠組みに従って提供しています。正規化されたメタデータで記述されているため、機械で使用するのに都合がいいのです。
この RDF を読んだり、後述する SPARQL を用いて検索したりすることで、ミリオンライブの情報を使用したアプリを作ることも可能になります。
RDF の詳しい説明については、わかりやすい解説サイトや W3C 勧告がありますので、そちらに説明を譲ります。
- RDF -- リソース表現のフレームワーク
- RDF入門(W3C 勧告の日本語訳)
このようなメタデータを共有するための技術の総称を Linked Open Data(LOD)といいます。
『im@sparql』との違い
みなさんのなかには、類似する LOD の『im@sparql』をご存知の方もいらっしゃるかもしれません。『im@sparql』は、広がるアイマスワールドをオープンデータ化する LOD プラットフォームです。アイマスの各シリーズを横断的にアイドルの情報などを提供されています。
『☆ピコピコプラネット☆』は、『im@sparql』が提供していないアルバムや楽曲、声優さんの情報など、ミリオンライブに関することという切り口から、なんでもオープンデータ化することをコンセプトにしています。今後は、ライブや書籍、ミリシタのゲーム情報などを追加していきたいと考えています。
ちなみに、筆者は『im@sparql』のコントリビュータでもあります。『☆ピコピコプラネット☆』では、アイドルの情報などで『im@sparql』へリンクさせることにより連携しやすくなる工夫をしています。
情報を検索する
データを正規化すると容易になるのが検索です。RDF クエリ言語の SPARQL を用いることで、RDF で記述されたリソース(情報)を SQL のように検索できます。
SPARQL は HTTP を介して発行できるため、Web API のように使用できます。
SPARQL の詳細についても、他の解説サイトや W3C 勧告に説明を譲ります。
- ジャパンサーチのSPARQLエンドポイント
- SPARQL 1.1 クエリ言語(W3C 勧告の日本語訳)
この記事では、『☆ピコピコプラネット☆』の実際のクエリ例をいくつか紹介します。以下で紹介するクエリは、『☆ピコピコプラネット☆』のトップページにあるフォームにコピペすることで、実際に試すことができます。
詳しい解説ができなくて申し訳ないですが、アイデア次第でいろんなクエリを書いて検索できるので、みなさんも試してみてください。提供している RDF は GitHub で公開していますので、SPARQL を書くときの参考にしてください。
https://github.com/foooomio/pikopikoplanet/tree/master/dataset
アイドルの名前とタイプを取得する
PREFIX mltd: <https://mltd.pikopikopla.net/mltd-schema#> PREFIX : <http://schema.org/> SELECT ?name ?type WHERE { ?s a mltd:Idol ; :name ?name ; mltd:typePrFaAn/:name ?type ; :position ?position . } ORDER BY ?position
七尾百合子が参加している楽曲
PREFIX mltd: <https://mltd.pikopikopla.net/mltd-schema#> PREFIX : <http://schema.org/> SELECT ?album ?position ?song WHERE { ?s a :MusicAlbum ; :name ?album ; :track [ :recordingOf/:name ?song ; :byArtist/:member?/:name "七尾百合子" ; :position ?position ] . }
収録された回数の多い楽曲
PREFIX : <http://schema.org/> SELECT ?song (COUNT(?song) AS ?count) WHERE { ?s a :MusicAlbum ; :name ?album ; :track/:recordingOf/:name ?song . } GROUP BY ?song HAVING (?count >= 2) ORDER BY DESC(?count)
ミリオン声優のTwitterアカウント
PREFIX mltd: <https://mltd.pikopikopla.net/mltd-schema#> PREFIX : <http://schema.org/> PREFIX foaf: <http://xmlns.com/foaf/0.1/> SELECT ?name ?account ?url WHERE { ?s a mltd:VoiceActor ; :name ?name ; foaf:account [ foaf:name "Twitter" ; foaf:accountName ?account ; foaf:page ?url ] . }
im@sparql からアイドルのイメージカラーを引いてくる
PREFIX mltd: <https://mltd.pikopikopla.net/mltd-schema#> PREFIX : <http://schema.org/> PREFIX imas: <https://sparql.crssnky.xyz/imasrdf/URIs/imas-schema.ttl#> SELECT ?name ?color WHERE { ?s a mltd:Idol ; :name ?name ; :position ?position ; :sameAs ?uri . SERVICE <https://sparql.crssnky.xyz/spql/imas/query> { ?uri imas:Color ?color } } ORDER BY ?position
フィードバック受付中!
『☆ピコピコプラネット☆』は、まだ生まれたばかりのサービスです。よりよいサービス提供のために、ご意見・ご感想を募集しています。また疑問点などありましたら、どんどん質問をお寄せください。
IM@Study Slack の #pikopikoplanet で受け付けております。みなさまのコントリビュートをお待ちしております!
宣伝です!
今週末の 12 月 7 日(土)、アイマスハッカソン 2019 が関東と関西で同時開催されます。参加者はまだ受付中ですので、ご興味ありましたら是非ご参加ください!
(『☆ピコピコプラネット☆』が使ってもらえたら嬉しいな〜)
ニコニコ動画のニコレポをミュート・ハイライトするGoogle Chrome拡張機能「ニコレポ・フィルター」
ニコニコ動画のニコレポタイムラインにミュート・ハイライト機能を追加するGoogle Chrome拡張機能「ニコレポ・フィルター」を公開しました。
特徴
- ニコニコ動画のニコレポを投稿の種類によって、ミュート・ハイライトの設定ができます。以下、例。
- 「ユーザーの再生数キリ番達成をミュート」すると、「○○ さんの動画が ○○○○ 再生を達成しました。」というニコレポが表示されなくなります。
- 「ユーザーの動画の投稿をハイライト」すると、「○○ さんが 動画を投稿しました。」というニコレポがハイライト表示されるようになります。
- ハイライト色は5種類から設定することができます。
- 設定されたルールは、Google Syncで自動的にお使いのGoogle Chromeに共有されます。
追加予定の機能
- 条件を削除せずに、編集できるようにします。
- ユーザ名で絞り込むなど複雑な条件を設定できるようにします。
- ニコレポの通知機能を搭載します。
使い方
- ニコニコ動画のマイページで、ブラウザの右上に追加される拡張機能のアイコンをクリックします。
- 「投稿者」「行動」「アクション」の条件を選択し、「+」ボタンをクリックします。
- ルールを削除する場合は、削除したいルールの右にある「×」ボタンをクリックします。
インストール
ソースコード
バグ報告・機能提案
拡張機能のサポートタブ、または、GitHubのIssueにてお願いします。
余談
似たような機能を提供する「ニコニコ除ニコレポ」という有名な拡張機能がありますが、こちらだとハイライト機能がなかったため、自分で作り直すことにしました。
ミュートの条件をより多くの投稿に対応したり、UIにこだわったり、単純なコピーにならないよう頑張ったつもりです・・・!
三菱東京UFJ銀行のATMマップを作った
皆さんの銀行口座はどちらにお作りでしょうか。自分は三菱東京UFJ銀行をメインバンクにしているのですが、一定以上の利用で自行ATM手数料が終日無料になるといった利点があります。
そのため三菱東京UFJ銀行のATMを使うことが多いのですが、Googleマップで検索すると出てこないATMがあったり、三菱UFJ信託銀行が引っかかったり、ちょっと面倒でした。
そこで
三菱東京UFJ銀行の公式サイトからゴニョゴニョしてきて、Googleマイマップにしてみました。
スマホでリンクを開くとGoogleマップが立ち上がる(iPhoneでアプリ内ブラウザが立ち上がる場合は、Safariで開き直す)ので、今後ハンバーガーメニューから表示/非表示を切り替えることができます。消えてしまった場合でも、マイプレイスを探せば見つかるはず。
更新頻度について
GoogleマイマップにAPIがなく、Google Apps Scriptからもいじれないので、公式サイトからゴニョゴニョしてくるところ以外は手作業です。運用でカバー、っていうやつです。
1日1回更新通知を入れてますが、その後はすべて手作業なので、若干のタイムラグはご容赦ください。
免責
このマップは三菱東京UFJ銀行の公式サイトから独自にデータを収集したものであり、株式会社三菱東京UFJ銀行とは一切関係ありません。また正確性を保証するものではなく、利用者に生じる不都合や損害には一切責任を負いません。
さいごに
三菱東京UFJ銀行の公式アプリでATM・店舗検索できるらしいorz
823年ぶりらしいので調べた
4行で収まる条件は、
- 2月が日曜日から始まる
- うるう年でない
の2つなので、ちゃちゃっと計算させてみましょう。
require 'date' 2015.downto(0) do |year| date = Date.new(year, 2, 1) puts year if date.wday == 0 && !date.leap? end
結果は、
$ ruby date.rb 2015 2009 1998 1987 1981 1970 1959 1953 1942 1931 1925 1914 1903 1891 1885 1874 1863 1857 1846 1835 1829 1818 1807 1801 1795 1789 1778 1767 1761 1750 1739 1733 1722 1711 1705 1699 1693 1682 1671 1665 1654 1643 1637 1626 1615 1609 1598 1587 1579 1573 1562 1551 1545 1534 1523 1517 1506 1495 1489 1478 1467 1461 1450 1439 1433 1422 1411 1405 1394 1383 1377 1366 1355 1349 1338 1327 1321 1310 1299 1293 1282 1271 1265 1254 1243 1237 1226 1215 1209 1198 1187 1181 1170 1159 1153 1142 1131 1125 1114 1103 1097 1086 1075 1069 1058 1047 1041 1030 1019 1013 1002 991 985 974 963 957 946 935 929 918 907 901 890 879 873 862 851 845 834 823 817 806 795 789 778 767 761 750 739 733 722 711 705 694 683 677 666 655 649 638 627 621 610 599 593 582 571 565 554 543 537 526 515 509 498 487 481 470 459 453 442 431 425 414 403 397 386 375 369 358 347 341 330 319 313 302 291 285 274 263 257 246 235 229 218 207 201 190 179 173 162 151 145 134 123 117 106 95 89 78 67 61 50 39 33 22 11 5
よくも騙してくれたな、のび太。
ちなみに、グレゴリオ暦が制定されたのは1582年で、日本で採用されたのは1872年のことです。
Mac用RSSリーダーのNetNewsWire3.3をChromeと連携させる
feedlyが全盛期のこの時代に、NetNewsWire 3.3というMac用RSSリーダーを使っているんだけど、Chromeで閲覧中のサイトのRSSをサクッと登録できれば便利だなと思ってやってみた。
実はそれに対するハックはすでに存在してて、
How to Open Feeds in NetNewsWire with Google Chrome — Capn Design
この通りに、RSS Subscription Extensionを入れて、URLにちょっとした細工をしてやれば、昔はうまく動いてた。
昔はというのは、このGoogle謹製の拡張機能が暴走するようになってしばらく使ってなかった間に、Content Security Policyの関係でURLのJavaScriptが動かなくなってしまっていたのだ。
しかたがないので、インラインでJavaScriptを走らせるのはあきらめて、外部で処理させてやることにした。要は、拡張機能から受け取ったURLをdecodeURIComponentして、feed://[URL]
の形でブラウザに渡してやればよい。これならそう難しくはない。
実際に用意したHTMLは以下の通りである。非常に簡単である。
<script> var s = location.hash.split(1); location.href = 'feed://' + decodeURIComponent(s); setTimeout(window.close, 1000); </script>
これを、http://foooomio.net/rss.html
に置いておいたので、拡張機能のURL欄にはJavaScriptを書く代わりにhttp://foooomio.net/rss.html#%s
と記入しておけばよい。
結局はdecodeの問題なのであるが、最新版のNetNewsWire 4 betaではうまく処理しているのかもしれない。しかし、今のところ乗り換える気はない。feedly? うーん、そのうち。