Tiny Tiny RSSでニコニコ動画の投稿動画一覧ページのRSSが新規購読できないので直しました。

nico.png

修正バージョン

こちらのURLにアクセスすると、RSSリーダーで新規登録可能でW3C的にもvalidなRSSを取得出来ます。パン作りがいつも美味しそうなハガーさんの場合だとこんな感じ。 https://rss.1ni.co/user/video/84143

どこが悪かったのか

ログを見てみると以下のような問題が起きているようです。
  • フィードのリンクが相対リンク
  • RSSリーダーがリンク先を読み込みに行くが、投稿動画一覧ページではRSSが紐付けられていないので読み込めない
また、新規購読とは関係ないけれど、
  • ItemのpubDateが空
  • Itemにcreatorまたはauthorが指定されていない
という問題もあります。メンテナンスされてません感がすごい。仕方ないけど。

そもそも投稿動画一覧ページのRSSってなによ

公式にアナウンスされていない(廃止候補なんだろうな)ので知らない人は知らないと思いますが、ニコニコ動画の投稿動画一覧にはRSSがあります(投稿動画一覧を公開している人に限る)。 前述のハガーさんの投稿動画一覧の場合、こちらが投稿動画一覧のページURLで、 https://www.nicovideo.jp/user/84143/video こちらが投稿動画一覧ページのRSS。 https://www.nicovideo.jp/user/84143/video?rss=2.0 うしろに「?rss=2.0」または「?rss=atom」を付けるだけです。

続きを読む

【メモ】Laravelium/FeedでItemの日付をオブジェクトで渡すとvalidなRSSにならなくなる【#np2020】

w3c_rss.png Laravelで簡単にRSS出力出来るライブラリ「Laravelium/Feed」がものすごく便利なのですが、サンプルに従ってRSSを出力すると実はvalidになら無いことがあります。こういう感じで日付を設定して、出力すると、なぜかRFC2822で出力されずにW3Cの「Feed Validation Service」で上のようなエラーが表示されてしまいます(必要な部分のみ抜粋)。 だいたいのRSSリーダーではこれでも正しく読めるので、問題ないっちゃないんですが、気になる場合には以下の通りに変えると無事通ります(21行目)。 Feed自体の出力日(lastBuildDate)はCarbonオブジェクトで渡すだけで正しく出力される($feed->formatDate()が使われている)ので、どうやらItemだけの問題のよう。

続きを読む

【DIY RSS】 Creative Office CUE「CUE DIARY」RSSを復活させました【#np2020】

creative_office_cue.png 昨日お知らせした「水曜どうでしょう」オフィシャルサイトの更新情報を配信するRSSに続いて、Creative Office CUEのサイト内コンテンツ「CUE DIARY」の更新情報を配信するRSSも復活させました。 https://rss.nplll.com/cue_diary 非常に趣味的な話なので需要はないかも知れませんが、個人的にはとても便利になりました。 ご利用ください。

続きを読む

【DIY RSS】 水曜どうでしょう「本日の日記」RSSを復活させました【#np2020】

かつて「RSS配信していないサイトの更新情報を取得し自分でRSS配信する」ということを「DIY RSS」と呼んでいました。対象サイトの構造の変化や、コードのメンテナンス性の悪さなどから更新が止まっていましたが、サイトの移行に伴って処理を見直して再構築することにしました。 というわけで復活の第1弾は、「水曜どうでしょう」オフィシャルサイトでディレクター陣が不定期更新している日記のRSSです。 https://rss.nplll.com/suidou 「http://」が「https://」に変わったのを除けばURLは同じです。本文と執筆者、更新日時などが取得出来ます。HTBはあんまりサイトのリニューアルする気がないようなので、しばらくはこのままいけるかなあと思います。とか言った瞬間に大幅リニューアルとかになったら笑うけど、その場合でも今のプログラムなら更新が容易なので、追随できるんじゃないかなと思っています。 興味のある方はご自由にどうぞ。

続きを読む

【ニコニコ動画】動画シリーズ用のRSSを作りました【#np2020】

niconico_ku.png ニコニコ動画に「動画シリーズ」という機能が追加されました。

投稿した動画をシリーズにまとめられるようになりました【ニコニコ動画】|ニコニコインフォ

2019年6月13日(木)より、ニコニコ動画で動画投稿者が自分の動画を順番にまとめた[シリーズ]を作成できるようになりました。 [シリーズ]機能を利用すると、続き物の動画などの管理が便利になります。 また、動画を視聴する際は、リストに並んでいる順番で動画を連続再生できます。

動画投稿者が自由に作成できマイリストとは別に管理出来るので、シリーズものを投稿している投稿者にとっては便利な機能かなと思います。実際にマイリストへの動画追加を止めてシリーズを使う人がちらほら出てきています。 それはそれでいいんですけど、僕みたいに更新情報をRSSでチェックしている時代遅れな人間にとっては、RSSが配信されているマイリストから配信されていないシリーズへ移行されることは割と死活問題です。今さらいちいちアクセスしてチェックとかしてられないし…… というわけで、作りました。 仕組みはシンプルで、
https://www.nicovideo.jp/series/3276https://rss.1ni.co/series/3276
でRSSとしてデータを取得可能です。 個人的な需要に基づいて作成したのでどれぐらい必要とされるかどうかわかりませんが、もし必要な方がいらっしゃいましたらどうぞ。

制限事項

今のところシリーズの1ページ目しかチェックしていないので、登録動画が増えてページングされた場合に、最新動画がチェック出来ません。そこまでたくさんの動画が登録されているシリーズをチェックしていないので作っていないんですが、必要があれば機能追加します。

続きを読む

LaravelでRSSフィードを配信する 【#np2020】

LaravelLogo.pngのサムネイル画像 ニコニコ動画を紹介するブログ「1日1ニコ」の関連機能の中に、「タグ検索RSS」というものがありました。ニコニコ動画オフィシャルのタグ検索RSSに動画投稿者と再生数を追加するというシンプルなものなのですが、動画投稿者を確認するってRSSリーダーでは割と大事なので、個人的には重宝していました(多分僕しか使ってないと思うけど)。 サイトのWordpressへの引っ越しに伴ってディレクトリ構成が変わってしまい、今現在はブログ記事に付けられたタグのRSSフィードになってしまっていてきちんと動いていないのですが、それをLaravelで実装し直しましょう、というお話です。 出来上がったもの。 https://rss.1ni.co/tag/MikuMikuDance

続きを読む

最近撮影した写真のサムネイル表示に今さらTumblrを利用するわけ

Tumblr 最近撮影してWebで公開した画像や写真をブログ上でサムネイル表示させています。写真の投稿先は基本的にInstagramで、Tumblrはあくまでそこから自動投稿されているに過ぎず、Tumblr自体をWebサービスとして使うということは今はほとんどしていません。昔は熱心に使っていたんですけどね。 そういう意味で言うと、最近の写真とはつまりInstagram上にあるものであって、そこから持ってこれるのが一番スマートなんですけど、最近のメジャーWebサービスは「WebAPIは公開しない」「RSSフィードも配信しない」「情報が見たかったら実際にサイトに行ってね」という傾向が強く、それはプライバシーの保護、セキュリティリスクの回避、自社サービスへの囲い込みが主な理由ですが、情報を自由にとって来れない状態になっているんですよね。もちろんスクレイピングして強引に持ってくることも出来なくはないけど、お互いにリソースがもったいないし。 そんな中でTumblrは、長らく開発が放置されている影響もあって今でもWebAPIが公開されているし、RSSフィードはあるし、多少のポリシーの変化があって利用者が減っていると言う面はありつつも情報ソースとしては今でも便利です。ガラパゴスにもメリットあるじゃんか。 いつまで今のシステムが維持されるかは不明ですが、とりあえず今時点では最も便利に使える写真集積プラットフォームです(プログラマブルな再利用的な意味で)。ただ、同じように環境が整っていて、ガラパゴスだった「Flickr」という写真共有サービスが迷走ののち見事に没落し、消えようとしている今、Tumblrも同じような方向に走るんじゃないかなあと危惧……いや多分近い将来そうなるんでしょうねという諦めを感じてもいます。 そうなったらそうなったで、何か考えれば良いんですけどね。自分だけ使えれば良いんだったら、S3に集めてそこから引っ張ってきたって良いんだしね。ただ今のところはまだ元気に活動中なので、その間だけは仲良くしておこうかなと思っています。

ちなみに

ほぼサービス休止中の「umbls.com」ですが、少しずつ新バージョンの実装を進めてはいます。Laravelになることで以前より開発スピードは上がるとは思うんですが、まだ提供する機能のテストをしているぐらいで、Webサービスとしてのシステム(ログインシステムなど)は全く手つかずなので、復旧出来るのはいつになることやら。それまでTumblrユーザーが残っているかどうか……

続きを読む

RSSを読み込んで表示するだけのツールをLaravel + BootstrapVueで作ってみました【#np2020】

Laravel + BootstrapVueの習作として、RSSを読み込んで何らかの形で表示するだけのツールを作成してみました。例によって僕個人が個人サイトで使用する目的のためだけに制作しているので、汎用性は保証していません。 (トラフィック次第では制限が掛かる可能性もあります)

続きを読む

【メモ】SimplePieでdescriptionとcontentを扱うコツみたいなもの

logo_simplepie_horizontal.png Awjudd\FeedReaderを通してSimplePieを使ってRSSフィードを操作しようとして嵌まったのでメモ。

嵌まったこと

  • はてなブックマークのRSSを取得して処理しようとすると、contentにHTMLが結構な量書き込まれていて、JSONに直して書き出すと処理が大変
  • contentを書き出さないようにしても、get_description()してdescriptionがなかったら自動的にcontentを持ってきてくれる親切設計
コメント(description)だけ欲しいのにどうしたらいいんや……

解決策:get_description(true)とする

ドキュメントがすごい見づらいので、探しつつ使い方を学ばなければならないんですけど、SimplePie_Item::get_description()の部分にこうありました。
Parameters
$description_only
boolean
Should we avoid falling back to the content?
つまり、$description_onlyがfalse(デフォルト)だと、descriptionがなかった場合に自動的にcontentを探すよってことらしいです。なので、その必要はない(descriptionが空なら空でOK)時には、trueを渡す必要があります。てか、そっちがデフォルトじゃないのか。

解決策:JSONにエンコードするときにタグを変換する

もっとよい解決策を知ったので追記。

[Laravel]レスポンスをJSON形式で返す方法2つ – Qiita

加えてContent-Typeもちゃんとapplication/jsonにしてくれる。

配列をreturnするだけでいいかんじに調整してJSONエンコードしてくれた上で、Content-Typeも調整してくれる! マジかー。 「こんなことする必要はないよ」ということでそれを知る前にやってたことも一応残しておきます。 内部では同じようなことしてるんだろうか。
json_encode ( mixed $value [, int $options = 0 [, int $depth = 512 ]] ) : string
この$optionsに「JSON_HEX_TAG」を指定してやると、すべての をそれぞれ \u003C および \u003E に変換します。同様に「JSON_HEX_AMP」「JSON_HEX_APOS」「JSON_HEX_QUOT」を指定してやると安心です。 こんな感じ。
return json_encode($data,JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP);

まとめ

ドキュメントを読みましょう。ドキュメント読んで解らなかったらソースコードを読みましょう。でもドキュメントに書いてあると嬉しいなあ。

続きを読む