超メモ帳(Web式)@復活

小説書いたり、絵を描いたり、プログラムやったりするブログ。統失プログラマ。


SPONSORED LINK

はてなブックマークのRSSのAPIのAccess-Control-Allow-Origin対策のためproxy作成した。

f:id:yuki_2021:20180727051036j:plain:w300


まずは質問箱の告知から。日曜日は質問箱への回答を行います。今週はまだ質問がきていないのですぐに答えることができます。


https://marshmallow-qa.com/yuki_20211?utm_medium=url_text&utm_source=promotionmarshmallow-qa.com


そっすね最近は質問は減少傾向ですね。聞かれたらなんでもマジレスが僕の質問箱の特徴だ。今までの回答はこんな感じ。


www.ituki-yu2.net


兎に角、聞かれたらなんでも答えますんでお気軽に質問箱までどうぞ?


さて、ちょっと早いけど今日は技術話題でもやろうと思うから早々に本題に入ろう。


ウチのブログのサイドバーの「はてぶがついた記事」についてはajaxはてなブックマークRSSを取得して表示しているんだけど、CORSのために外部サーバとajaxでの通信ってのは出来ない。


developer.mozilla.org


サーバ側でAccess-Control-Allow-Originの設定ができてないとクロスドメインでのAjax利用はできないようになっているんだ。なのでうちのブログではproxyサーバしている人のAPIを利用してそこを経由して取得していた。


https://allow-any-origin.appspot.com/


だけど、最近はこのサイトはメンテナンスがあまりされないようになったみたいで、うちのブログの「はてぶがついた記事」もタイム・アウトして表示されなくなることが多くなっていた。


なので、自前でで経由させるproxyサーバを用意することにした。とは言ってもレンタルサーバに下記のPHPファイルをおいてそちらを経由するように変更しただけ。

<?
$options = array('http'=>array('header'=>'User-Agent: Entrylist crawler'));
$context = stream_context_create($options);
$html = file_get_contents('http://b.hatena.ne.jp/entrylist?mode=rss&sort=count&url=https://www.ituki-yu2.net/', false, $context);

header('Access-Control-Allow-Origin:https://www.ituki-yu2.net');
header("Content-type: text/xml;charset=utf-8");

echo $html;


基本的にはPHPのfile_get_contentsでRSSを取得してきて、Access-Control-Allow-Originの許可を付けてアウトプットすりゃいいだけなんだけど、はてなブログAPIにfile_get_contentsでアクセスするときはユーザーエージェントがいるらしい。その条件を追加。


www.karakaram.com


この部分である。

<?
$options = array('http'=>array('header'=>'User-Agent: Entrylist crawler'));
$context = stream_context_create($options);
$html = file_get_contents('http://b.hatena.ne.jp/entrylist?mode=rss&sort=count&url=https://www.ituki-yu2.net/', false, $context);


Access-Control-Allow-Originは「Access-Control-Allow-Origin:*」としてやればすべてのアクセスを許可するが、セキュリティ的な観点から自分のブログ以外のアクセスを許可しない。
気をつけてほしいのは後ろの「/」はいらない。


これだけやれば、あとはcharset=utf8のヘッダーを出力してやればRSSのproxyが完成する。Access-Control-Allow-Originを回避する正攻法ってこういうのしか無い気がする。


はてなブックマークRSSに追加できるオプションについてはこちらを参照。


d.hatena.ne.jp


自分のサイドバーのブログパーツがどんなふうに動いてるかは下記参照。


www.ituki-yu2.net


今日はこんな感じで終える。おつかれー。


サイドバーの「はてブがついた記事」の不具合を直した。 - 超メモ帳(Web式)@復活
見出しのないはてなブログの文中にgoogleアドセンスを自動挿入する方法。 - 超メモ帳(Web式)@復活
【質問箱への回答】はてなブログでGoogleアドセンスをダブルレクタングルで配置するコードを紹介します。 - 超メモ帳(Web式)@復活

プライバシーポリシー免責事項