外部ドメインのURLからファイル内容を取得する

twitterAPIの対応していない外部ドメインのURLのコンテンツは、そのままでは基本的に取得できません。
そこで、

1 PHPで外部ドメインのデータを取得
2 jQueryのajaxでデータを取得
3 必要な要素を抽出

という手順を踏むことで、無理矢理取得します。

【PHPのコード】

めちゃくちゃ簡単です。


<?PHP



$context = stream_context_create(array(
      'http' => array('ignore_errors' => true)
 ));

@$data = file_get_contents(htmlspecialchars($_GET[url]),false,$context);
print $data;


?>

基本的にこれだけ。
呼び出し方は、
http://****.***/ファイル名?url=外部URL名

こんな感じです。
file_get_contentsで対象URLの中身をHTMLですべて取得します。

【javascriptのコード】

こっちも大したことしません。
ただし、jQuery必須です。
呼び出すPHPファイル名をhogehoge.php、取得したいURLを変数urlで扱うとして、


$.ajax({
type:'GET',
url:"hogehoge.php?url=" + url,
success : function(data){
console.log(data);
}
});

基本これだけ。
あとはdataに格納されたHTMLから好きな要素を取り出せばOKです。

ただし、注意点が一つ。

jQueryで要素を取得する関係で$(data)とすると思いますが、この場合、headタグの中の要素とbodyタグの中の要素が$(data)内にゴチャゴチャになって入っています。(jQueryのバグ?仕様?らしいです)

だから、例えばこんな構造から、

<body>
 <div class="parent_div">
  <img class="child_img" />
 </div>
</body>

$(".child_img")のsrcを取得したい、と思ったら、

$(data).find("body").children(".parent_div").children(".child_img").attr("src");

みたいになりそうなもんですが、現実には

$(data).find(".child_img").attr("src");

みたいな感じになります。
とにかく要素がゴチャゴチャになっているので、取得したHTMLがどういうDOM構造をしているのかを、ChromeのDeveloper Toolsのコンソールで一度確認した方が良いでしょう。


コメント

人気の投稿