PHP便利なWebページを素早く作るために使われている開発言語です。APIを使わずにXMLHttpRequestでクロスドメインのRSSを取得してデータを抽出した際に作った自作サーバーの立て方とJavaScriptでの取得方法です。JavaScriptに関して言うとjQueryを使わなくても大した行数にはならないです。API」を使わず、XMLHttpRequestでクロスドメインのRSSを取得して最新記事一覧を表示させるスクリプトを書いたんですが、その際にわからなかったことをまとめておきます。JavaScriptに関しては下に書きますが、jQueryは使っていません。RSS取得後のネームスペース付きXMLからデータを抽出する方法はクロスドメインとは別の問題なので、他のページ「querySelectorでIEでもそれ以外でもネームスペース付のXMLからデータを取得する方法」にまとめています。需要があるかどうかは別にして、単純に自ドメインのRSSを取り込むだけなら通常通りのやり方で問題ないんですが、クロスドメインになるとアクセス拒否されます。API」が使えないという騒動になりました。外部サービスに頼るとそのサービスが止まった時に困るという事で、自前で外部RSSを中継するサーバーを立てました。中継サーバーは数行のスクリプトで出来るんですが、PHPの場合なら次のようになると思います。通信出来てて200以外の場合でもfalseが返る。コードである場合は、ファイルの最後の終了タグは省略するのがおすすめです。結果がxmlなのかどうかをチェックせずにそのまま返してもいいのかも知れませんが、今回はアクセス制限をしないので悪用防止でxml以外は返さないようにしています。ここで重要なのは赤文字の2行です。これがないとクロスドメイン問題が解消されません。注)このスクリプトを置くURLと同じドメインからのアクセスなら赤文字2行がなくても通信できます。なく、他のドメインとも通信する場合には必要です。このスクリプトにアクセスして特定サイトの最新記事一覧を取得するブログパーツを配布する場合などは、どのURLのブログからアクセスが来るかわかりません。いう時には赤文字の2行が必要です。MDN上のサイトに詳しく書いてあるんですが、XMLHttpRequestでクロスドメイン間通信を行うには、サーバー側でそれを許可する旨のヘッダーを送信しないといけません。」というらしくて、XMLHttpRequest以外にもWebフォントなどを特定ドメインだけに限定して許可したりできます。今回は説明を簡単にするためにPHPのheader関数で送信していますが、.htaccessに書くことができます。上の2行を.htaccessに書く場合はこうなります。GETAccess-Control-Allow-OriginAccess-Control-Allow-Originには、アクセスを許可するURIを指定します。アクセスを許すのであれば、次のように書きます。http://example.comアクセスを許可するサイトを複数指定することも出来なくはないのですが、工夫が必要みたいです。*Access-Control-Allow-MethodsAccess-Control-Allow-Methodsには、アクセスに許可するメソッドを指定します。GET通信のみ許可する場合は次のようになります。始まるヘッダは他にもあるんですが、この2つの指定だけでもXMLHttpRequestでの通信は出来るようになります。JavaScript側の対応サーバー側で上記の設定をしていれば、JavaScript側では普通にXMLHttpRequest通信をするだけです。ないとクロスドメイン間通信は出来ないと書いてあるサイトが多かったのですが今は大丈夫みたいです。見つかりませんでした。次のようにして試してみたらIE11でもそれ以外でも2が表示されます。返ってくるんですがクロスドメイン間通信は出来ました。古いバージョンのIEではダメでしょうから、結論としてJavaScriptのXMLHttpRequestでRSSを取得するには下のようになります。Level2に対応していないブラウザ(クロスドメイン間通信自体が出来ないブラウザ)ではcallback関数は呼ばれませし、エラーメッセージも表示しません。私は「サイドバーに最新記事一覧を表示させるブログパーツ」に使ったので、未対応ブラウザではエラー表示をするよりも、パーツのタイトルも含めて一切何も表示させない方がユーザーが混乱しないと思ったので。xhr.send('');}これでRSSのxml自体は取得できます。後は取得したデータを処理するcallback関数の中身を書くだけです。RSSはネームスペース付きXMLなのでquerySelectorでうまくデータが取得できなかったんですが、JavaScriptでネームスペース付きXMLからデータを取得する方法がわかれば解決します。それに関してはXMLHttpRequestでのクロスドメイン通信とは違う話なので別のページ「querySelectorでIEでもそれ以外でもネームスペース付のXMLからデータを取得する方法」にまとめました。必要ならそちらをご覧ください。取得したRSSから各ページの最初の画像も抽出して一覧表示するサンプルを掲載しています。取得するURLが同ドメインかクロスドメインか判断して取得先を振り分けるJavaScript取得するRSSのURLが固定なら問題ないですが、場合によって同じドメインのRSSを取りに行ったり別ドメインのRSSを取りに行ったりする場合、同じドメインなのに上の自作サーバーを経由するのはムダです。取得するURLに自ドメインと別ドメインが混在する場合は、JavaScript側でアクセスする先を切り替えるようにします。違う場合のみ中継サーバーを使う。}}get_rss('http://example.com/index.rdf');取得したデータのContent-Typeを調べるにはgetResponseHeaderを使う今回のスクリプトでは使っていませんが、もし取得したデータのレスポンスヘッダを見るにはgetResponseHeaderメソッドを使います。Content-Typeを取得したい場合は次のようにします。まとめにコメントPHPでTwitterのOAuth認証するサイトのサンプルページを作ってみましたPHPでTwitterのOAuth認証でログインするサイトのサンプルページを作って見ました。実行内容は、次の通りです。ログイン済みかどうかをチェック。使って状況に応じたメッセージを表示。「ログイン」をクリックしたら、Twitterの認証ページヘリダイレクト。あとは自由にページを見られる。「ログアウト」をクリックしたらログアウトする。PHPでTwitterのOAuth認証を使ってログインするサイトのサンプルページを作って見ました。http://php-oauth-sample.dwm.me/追記:上のはあまりにもみすぼらしいので、ちょっと真面目に作り直しました。こちらが新しいサンプルです。http://dwm.me/sample/todo/ただし、今ご覧頂いているページの内容は最初のサンプルにそって書かれています。ダウンロードできます。実行内容は、次の通りです。ログイン済みかどうかをチェック。使って状況に応じたメッセージを表示。「ログイン」をクリックしたら、Twitterの認証ページヘリダイレクト。あとは自由にページを見られる。「ログアウト」をクリックしたらログアウトする。