FacebookCanvasアプリを作成しました。このキャンバスアプリは基本的に画像ライブラリであり、ユーザーは[次へ]ボタンをクリックすることで画像を表示できます。これは非常に簡単です。
ユーザーが画像を「見た」ときに、GraphAPIを使用してカスタムオブジェクトに投稿しています。私はそうします(PHP SDK):
$this->data['facebook']->api('/me/myapp:look_at', 'post', array(
'picture' => current_url()
));
current_url()は、Facebookキャンバスの現在のURL(https://apps.facebook.com/myapp/image/id)です。このページには、一連のogメタタグがあります。
<meta property="og:title" content="<?=$image->title?>" />
<meta property="og:description" content="Pic of <?=$image->title?>" />
<meta property="og:image" content="https://www.***.com/***/images/<?=$image->src?>" />
<meta property="fb:app_id" content="<?=FB_APP_ID?>" />
<meta property="og:url" content="<?=current_url();?>" />
<meta property="og:type" content="myapp:picture" />
ライブラリに画像を追加するときに、Facebookにog:tagsのページをスクレイプさせる必要があることを読みました。私は以下を使用してこれを行います:
file_get_contents('https://graph.facebook.com?id=https://apps.facebook.com/myapp/image/'.url_title($_POST['title']).'/'.$data['image_id'].'&scrape=true');
ただし、これが機能していないことは間違いありません。アプリでmail()呼び出しを行った後、そのURLにアクセスして何も待たずに、それがスクレイピングされていないことを示しています。
コードの最初のブロックを実行すると(Graph API myapp:look_atを呼び出す)、Facebookから次の例外が発生します。
Fatal error: Uncaught OAuthException: (#3502) Object at URL https://apps.facebook.com/myapp/image/img/id has og:type of 'website'. The property 'picture' requires an object of og:type 'myapp:picture'. thrown in /****/application/libraries/base_facebook.php on line 1106
Facebookのデバッガツールを使用してページをスクレイプすると、すべての情報が得られます。次に、FB Graph API呼び出しが行われるキャンバスページに再度アクセスすると、すべてが正常に実行されます。他のSOの投稿で、これは一般的な問題であると読んだことがあります。グラフAPIを呼び出す前に、Facebookにページをスクレイプするように依頼する必要があります。これは、上記のコードの3番目のブロック(file_get_contents)で実行しようとしていることです。運がなければ。
私の質問は次のようになると思います:私はこれについて正しい方法で行っていますか?このように使用された場合、プロセスに関する明確なドキュメントを見つけるのに苦労しています。
正しい方法で進めている場合、file_get_contents('https:// app ....)を呼び出したときにページがスクレイプされないのはなぜですか?
長い投稿で申し訳ありませんが、私はあなたに全体像を提供しようとしています。
ありがとう