0

ファイルがサーバーに保存されている間にデータベースを使用してビデオを動的にロードするビデオページを作成しました。ビデオはページにプリロードされており、そのデータは問題なくいいねしてFacebookに投稿できます。新しいサムネイルをクリックすると、Facebookのいいね情報を新しいビデオコンテンツ(タイトル、URL、画像)に変更したいのですが。私は解決策を探しましたが、似たようなものはたくさんありますが、追加するという単純な解決策は私にはうまくいきFB.XFBML.parse();ません。Ajax呼び出しが正常に戻ってきたら、次を使用してメタタグを更新します。

$("meta[property=og\\:title]").attr('content', videoTitle); 
$("meta[property=og\\:url]").attr('content', "www.mySiteURL.com/index.php?videoID="+videoID);
$("meta[property=og\\:image]").attr('content', "www.mySiteURL.com/images/video/"+videoImageName);

しかし、これらが設定された直後に解析コードを実行すると、ボタンが更新されますが、同じ内容になっています。メタタグが実際にFirebugを使用して更新されていることがわかります。FBボタンがページ情報を適切に再スクレイプしてFBに送信しないだけです。htmlタグに名前空間を設定し、他のog:metasも設定していますが、これらは再スクレイプする必要がある3つです。

ある投稿で、誰かajax.complete(function(){FB.XFBML.parse();});がメインページで直接似たようなものを使用しているのを見ました。正確なコードは覚えていませんが、アイデアは同じで、それでも機能しませんでした。成功すれば、ajax関数内で実行するだけで十分だと思いました。

私は何かが足りないのですか?

どんな助けでも大歓迎です!

ありがとう。

編集:各動画には、すべてajaxを介して読み込まれるため、og:urlに挿入される独自の直接URLがあることを追加する必要があります。Facebook Linter / Object Debuggerは、これらの一意のURLのいずれかを使用すると、各ビデオの正しいデータをすべて表示します。これは単なるスクレイピングの問題です。少なくとも、これに関する知識が限られているので、それが私には思えます。

4

3 に答える 3

1

現在のページのメタタグを動的に変更しているようです-これは必要ではなく、Facebookのスクレイプ(Facebookのデバッグツールを使用して確認できます)で問題が発生する可能性があります-

オブジェクトごとに1つの静的URLを維持し、そのURLからメタタグを提供し(必要に応じて他のブラウザーをリダイレクトできます)、動的ページで「いいね」ボタン自体を変更して、現在表示されているオブジェクトのURLを指すようにします(つまり、「いいね」を削除します)ボタンをクリックし、新しいfb:likeタグを追加して、再度呼び出しますFB.XFBML.parse();

于 2012-11-13T22:05:40.083 に答える
1

すべてのビデオはajaxを介してロードされるため、各ビデオにはog:urlに挿入される独自の直接URLがあることを追加する必要があります。Facebook Linter / Object Debuggerは、これらの一意のURLのいずれかを使用すると、各ビデオの正しいデータをすべて表示します。これは単なるスクレイピングの問題です。少なくとも、これに関する知識が限られているので、それが私には思えます。

いいえ、それはスクレイピングの問題ではありません。スクレイパーはJavaScriptを気にしないため、クライアント側で更新したメタタグを認識しないためです。サーバーに対してHTTPリクエストを行うため、現在ページを表示しているあらゆる種類のクライアントで行うことはまったく関係ありません。

あなたがする必要があるのは、いいねボタンが指しているターゲットURLを更新することです:既存のいいねボタンを現在のビデオページのURLを含むhref属性を持つ新しいいいねボタンコードに置き換え、FB.XFBML.parseを実行します–そして意図したとおりに機能します。

于 2012-11-13T22:51:22.480 に答える
0

FB.XFBML.parse();メタタグを更新した後で呼び出す必要があります。これにより、FBMLタグが再度レンダリングされます。

FB.XFBML.parse();ここでより多くの情報

于 2012-11-13T22:12:02.590 に答える