外部ドメインのURLからファイル内容を取得する
twitterAPIの対応していない外部ドメインのURLのコンテンツは、そのままでは基本的に取得できません。
そこで、
1 PHPで外部ドメインのデータを取得
2 jQueryのajaxでデータを取得
3 必要な要素を抽出
という手順を踏むことで、無理矢理取得します。
<?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ですべて取得します。
ただし、jQuery必須です。
呼び出すPHPファイル名をhogehoge.php、取得したいURLを変数urlで扱うとして、
$.ajax({
type:'GET',
url:"hogehoge.php?url=" + url,
success : function(data){
console.log(data);
}
});
そこで、
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のコンソールで一度確認した方が良いでしょう。
コメント