5

ブラウザでこのURLにアクセスすると、期待するjsonフィードが表示されます。

https://www.facebook.com/feeds/page.php?format=json&id=237173582992285

PHPの場合、私は

<?php
print_r(file_get_contents('https://www.facebook.com/feeds/page.php?format=json&id=237173582992285'));
?>

ブラウザがFacebookでサポートされていないため、アップグレードする必要があるというHTMLページが表示されます。file_get_contentsが期待しているjsonフィードを返すようにするにはどうすればよいですか?

追記 bashからも試しましwget https://www.facebook.com/feeds/page.php?format=json&id=237173582992285たが、ダウンロードしたファイルには、ブラウザがサポートされていないというhtmlコンテンツも含まれています。

4

5 に答える 5

8

これを試してみてください、それは私のために働きます

 $ch = curl_init("https://www.facebook.com/feeds/page.php?format=json&id=237173582992285");
  curl_setopt( $ch, CURLOPT_POST, false );
  curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true );
  curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.7.12) Gecko/20050915 Firefox/1.0.7");
  curl_setopt( $ch, CURLOPT_HEADER, false );
  curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
  $data = curl_exec( $ch );
  echo $data;

@Michael Miorが指摘しているように、Facebookの規約に違反しています。しかし、これはあなたの質問に対する答えです。Facebookには、ページをブラウザで開く必要があることを確認する簡単なチェックがあります。したがって、useragentヘッダーを設定することでページを模倣しています。

于 2012-11-03T20:23:39.670 に答える
2

代わりにFacebookAPIを使用する必要があります。Graph API Explorerは、PagesAPIのドキュメントだけでなく開始にも役立ちます。

フィードはRSSリーダーで使用するように設計されており、スクリプトで使用するためのものではありません。理論的にはヘッダーを変更することでこれを回避できますが、User-AgentこれはFacebookの利用規約に違反します

事前の許可なしに、自動化された手段(ボット、ロボット、スパイダー、スクレーパーの収集など)を使用して、ユーザーのコンテンツや情報を収集したり、Facebookにアクセスしたりすることはできません。

于 2012-11-03T20:17:27.440 に答える
2

ページの公開投稿を取得するには、feed有効なとの接続である対応する接続​​を使用する必要がありますaccess_token

したがって、言及したページの公開フィードを取得するには、を使用します/237173582992285/feed。さらに、必要なデータのみを取得するように選択できます。たとえば/237173582992285?fields=feed.fields(message,type,status_type) 、次のようになります。

{
  "id": "237173582992285",
  "feed": {
    "data": [
      {
        "message": "???? ???? ???? :) - ??? <3",
        "type": "photo",
        "status_type": "added_photos",
        "id": "237173582992285_461226513920323",
        "created_time": "2012-11-03T12:46:20+0000"
      },
      {
        "message": "?????? ????? ? ???? ???? ????? ?? ??????? ? ????? ???? ??????? ????? ???? ???????? ????????? :D :D :D - ??? <3",
        "type": "photo",
        "status_type": "added_photos",
        "id": "237173582992285_457876184255356",
        "created_time": "2012-10-26T09:43:01+0000"
      }, 
      ....etc
    ],
    "paging": {
      "previous": "https://graph.facebook.com/237173582992285/feed?fields=message,type,status_type&limit=25&since=1351946780",
      "next": "https://graph.facebook.com/237173582992285/feed?fields=message,type,status_type&limit=25&until=1348763989"
    }
  }
}

ページのエンドポイントについて詳しくは、こちらをご覧ください。

于 2012-11-03T20:25:36.813 に答える
0
function load_url($url) {
  $ch = curl_init($url);
  curl_setopt( $ch, CURLOPT_POST, false );
  curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true );
  curl_setopt( $ch, CURLOPT_HEADER, false );
  curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
  curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.0.3705; .NET CLR 1.1.4322; Media Center PC 4.0)');
  $received_data = curl_exec( $ch );
  if($received_data){
  return $received_data;
  } else {
  return false;
 }
}
于 2012-11-03T20:14:16.960 に答える
0
 function get_facebook_id($facebookUrl)
 {
 $ch = curl_init($facebookUrl);
 curl_setopt( $ch, CURLOPT_POST, false );
 curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true );
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; 
rv:1.7.12) Gecko/20050915 Firefox/1.0.7");
 curl_setopt( $ch, CURLOPT_HEADER, false );
  curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
 $fbResponse = curl_exec( $ch );
if($fbResponse)
{
    $matches = array();
    if (preg_match('/"entity_id":"([0-9])+"/', $fbResponse, $matches))
    {
        $jsonObj = json_decode("{" . $matches[0] . "}");
        if($jsonObj)
        {
            $facebookId = $jsonObj->entity_id;
        }
    }
}
return $facebookId;
}
于 2019-06-05T17:50:46.287 に答える