自分の作っているFC2ブログの、一番最新の記事だけをPHPでスクレイピングしてホームページに載せようとおもっているのですが、何故か出来ません、


file_get_contentsで取得出来ないのは、クッキーやリファラー、ヘッダ等を見てスクレイピング防止しているのだと思いますが、それでもスクレイピングする方法を教えてください。

具体的なスクリプトを教えていただけた方に、ポイントを御礼したいと思います。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2012/09/12 23:41:10
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:Cherenkov No.1

回答回数1504ベストアンサー獲得回数493

ポイント500pt

普通にできました。rssから最新エントリのurlを取得して、file_get_contentsでソース取得。
文字コードはutf-8で保存。

<?php
function pr($var) {
	echo '<pre>'; print_r($var); echo '</pre>';
}
header('Content-Type:text/html; charset=UTF-8');
$feedUrl = 'http://ブログURL.blog99.fc2.com/?xml';
$rss = simplexml_load_file($feedUrl);
$newEntryUrl = (string)$rss->item[0]->link;
$html = file_get_contents($newEntryUrl);
pr($html);

うまくいかないコードとブログURLを提示するといいかもしれません。


追記:
>「全体」の取得はできていました。
>しかしそれをメインの記事部分だけ表示したく、正規表現でentry_bodyなどだけ出力しようとすると、
>どうしても表示出来ないのですが、これはやはりスクレイピング防止という事でしょうか。
抜き出しの処理が間違っているのだと思います。
自分のブログならソースコードも一定(テンプレート書き換えによる変化がない)なので以下のようにすればできました。

<?php
function pr($var) {
	echo '<pre>'; print_r($var); echo '</pre>';
}
header('Content-Type:text/html; charset=UTF-8');
$url = 'http://ブログURL.blog99.fc2.com/';
$html = file_get_contents($url);
preg_match('/<div class="entry_body">.+?<div class="content">(.+?)<div class="fc2_footer"/isu', $html, $entryBody);
pr($entryBody[1]);

ミソは正規表現パターンの修飾子でsを使うことかと。

他3件のコメントを見る
id:Cherenkov

あと、質問者さんがコメントをしているところは補足欄です。
内容が上書きされてしまうので、コメントは回答の下にあるコメント欄に書くようにしてください。

2012/09/12 18:14:33
id:Cherenkov

これでできました。classのentryのスペルが間違ってます。

<?php
function pr($var) {
	echo '<pre>'; print_r($var); echo '</pre>';
}
header('Content-Type:text/html; charset=UTF-8');
$url = 'http://musicpvfreedownload.blog64.fc2.com/';
$html = file_get_contents($url);
preg_match('/(<div class="ently_body">.+?)<!--\/ently_body-->/isu', $html, $entryBody);
pr($entryBody[1]);
2012/09/12 21:31:51

その他の回答0件)

id:Cherenkov No.1

回答回数1504ベストアンサー獲得回数493ここでベストアンサー

ポイント500pt

普通にできました。rssから最新エントリのurlを取得して、file_get_contentsでソース取得。
文字コードはutf-8で保存。

<?php
function pr($var) {
	echo '<pre>'; print_r($var); echo '</pre>';
}
header('Content-Type:text/html; charset=UTF-8');
$feedUrl = 'http://ブログURL.blog99.fc2.com/?xml';
$rss = simplexml_load_file($feedUrl);
$newEntryUrl = (string)$rss->item[0]->link;
$html = file_get_contents($newEntryUrl);
pr($html);

うまくいかないコードとブログURLを提示するといいかもしれません。


追記:
>「全体」の取得はできていました。
>しかしそれをメインの記事部分だけ表示したく、正規表現でentry_bodyなどだけ出力しようとすると、
>どうしても表示出来ないのですが、これはやはりスクレイピング防止という事でしょうか。
抜き出しの処理が間違っているのだと思います。
自分のブログならソースコードも一定(テンプレート書き換えによる変化がない)なので以下のようにすればできました。

<?php
function pr($var) {
	echo '<pre>'; print_r($var); echo '</pre>';
}
header('Content-Type:text/html; charset=UTF-8');
$url = 'http://ブログURL.blog99.fc2.com/';
$html = file_get_contents($url);
preg_match('/<div class="entry_body">.+?<div class="content">(.+?)<div class="fc2_footer"/isu', $html, $entryBody);
pr($entryBody[1]);

ミソは正規表現パターンの修飾子でsを使うことかと。

他3件のコメントを見る
id:Cherenkov

あと、質問者さんがコメントをしているところは補足欄です。
内容が上書きされてしまうので、コメントは回答の下にあるコメント欄に書くようにしてください。

2012/09/12 18:14:33
id:Cherenkov

これでできました。classのentryのスペルが間違ってます。

<?php
function pr($var) {
	echo '<pre>'; print_r($var); echo '</pre>';
}
header('Content-Type:text/html; charset=UTF-8');
$url = 'http://musicpvfreedownload.blog64.fc2.com/';
$html = file_get_contents($url);
preg_match('/(<div class="ently_body">.+?)<!--\/ently_body-->/isu', $html, $entryBody);
pr($entryBody[1]);
2012/09/12 21:31:51
id:iori753

お忙しい中ありがとうございます。

こちらのブログになるのですが、XAMPPでもさくらの共用でも取得が出来ませんでした。

http://musicpvfreedownload.blog64.fc2.com/

大変お手数おかけしますが、宜しくお願い致します。

  • id:iori753
    お忙しい中ありがとうございます。
    こちらのブログになるのですが、XAMPPでもさくらの共用でも取得が出来ませんでした。
    http://musicpvfreedownload.blog64.fc2.com/

    大変お手数おかけしますが、宜しくお願い致します。
  • id:iori753
    何度もありがとうございました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません