FBで自分のページの1つを共有するとき、何か別のものを表示したい。問題は、og:要素を使用するのではなく、FBユーザーエージェントを認識することです。
それは何ですか?見つかりません。
ユーザーエージェント文字列のリストについては、 here を参照してください。 2015年9月現在、最も使用されているのはfacebookexternalhit/*
およびFacebot
。あなたがユーザーエージェントを認識しようとしている言語を述べていないので、私はあなたにもっと情報を伝えることができません。 PHPでFacebookボットを認識したい場合は、
if (
strpos($_SERVER["HTTP_USER_AGENT"], "facebookexternalhit/") !== false ||
strpos($_SERVER["HTTP_USER_AGENT"], "Facebot") !== false
) {
// it is probably Facebook's bot
}
else {
// that is not Facebook
}
[〜#〜] update [〜#〜]:Facebookは、可能なユーザーエージェント文字列のリストにFacebot
を追加しました。変更を反映するようにコードを更新しました。また、コードは、将来の変更の可能性をより予測しやすくなりました。
「Facebookのユーザーエージェント文字列はfacebookexternalhit/1.1(+ http://www.facebook.com/externalhit_uatext.php )...」
こんにちは
小さいながらも重要な修正-> Facebook外部ヒットは、2つの異なるユーザーエージェントを使用します。
facebookexternalhit/1.0 (+http://www.facebook.com/externalhit_uatext.php)
facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)
フィトラーを1.1のみに設定すると、1.0バージョンでフィルタリングの問題が発生する可能性があります。
Facebookボット(およびその他のボット)の詳細については、 Botopedia.org -Incapsulaを使用したコミュニティソースのボットディレクトリを参照してください。
ユーザーエージェントデータに加えて、ディレクトリにはIP検証オプションもあり、IP /ユーザーエージェントを相互検証できるため、なりすましの試みを防ぐことができます。
Facebookクローラーユーザーエージェントは次のとおりです。
FacebookExternalHit/1.1
FacebookExternalHit/1.0
または
facebookexternalhit/1.0 (+http://www.facebook.com/externalhit_uatext.php)
facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)
バージョン番号が変更される可能性があることに注意してください。そのため、正規表現を使用してクローラー名を見つけ、コンテンツを表示します。
更新:
このコードをPHPで使用して、Facebook User Agentを確認できます。
if(preg_match('/^FacebookExternalHit\/.*?/i',$agent)){
print "Facebook User-Agent";
// process here for Facebook
}
ASP.NETコードは次のとおりです。この関数を使用して、userAgentがFacebookのuseragentであるかどうかを確認できます。
public static bool IsFacebook(string userAgent)
{
userAgent = userAgent.ToLower();
return userAgent.Contains("facebookexternalhit");
}
注意:
なぜそれをする必要があるのですか? Facebookでサイトへのリンクを共有すると、facebookはそれをクロールして解析し、ページからサムネイル、タイトル、およびコンテンツを表示するためのデータを取得しますが、リンクはサイトに戻ります。
また、これはサイトのクローキング、つまりユーザーとクローラーに異なるデータを表示することにつながると思います。クローキングはグッドプラクティスとは見なされず、検索エンジンとサイトがそれに気付く場合があります。
更新:Facebookも2014年5月28日から新しいユーザーエージェントを追加しました
Facebot
Facebookクローラーの詳細については、 https://developers.facebook.com/docs/sharing/webmasters/crawler をご覧ください。
時々エージェントはvisionutils/0.2
。あなたもそれを確認する必要があります。
簡単な解決策は、パターンをチェックすることであり、毎回すべての混乱をユーザーにロードすることではありません
<?php
# Facebook optimized stuff
if(strstr($_SERVER['HTTP_USER_AGENT'],'facebookexternalhit')) {
$buffer.='<link rel="image_src" href="images/site_thumbnail.png" />';
}
?>
FB側でのユーザーエージェントの変更の観点では、次のような正規表現を使用する方が安全です。
<?php
if (preg_match("/facebook|facebot/i", $_SERVER['HTTP_USER_AGENT'])){
do_something();
}
?>
Facebookクローラーの詳細については、ドキュメントをご覧ください: https://developers.facebook.com/docs/sharing/webmasters/crawler
また、facebookボットがWebサイトにアクセスするのをブロックする場合(Apacheを使用している場合)、これを.htaccess
ファイル:
<Limit GET POST>
BrowserMatchNoCase "Feedfetcher-Google" feedfetcher
BrowserMatchNoCase "facebookexternalhit" facebook
order deny,allow
deny from env=feedfetcher
deny from env=facebook
</Limit>
また、安価なDDoSingにも使用できるgoogleのfeedfetcherをブロックします。
Facebookユーザーエージェントは次のとおりです。
FacebookExternalHit/1.1 FacebookExternalHit/1.0 facebookexternalhit/1.0 (+http://www.facebook.com/externalhit_uatext.php) facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php) facebookexternalhit/1.0 (+https://www.facebook.com/externalhit_uatext.php) facebookexternalhit/1.1 (+https://www.facebook.com/externalhit_uatext.php)
以下のコードを使用してPHPでFB User-Agentを検出していますが、意図したとおりに動作します。
$agent = $_SERVER['HTTP_USER_AGENT'];
if(stristr($agent, 'FacebookExternalHit')){
//Facebook User-Agent
}else{
//Other User-Agent
}
まず、サブセットだけでなく完全なユーザーエージェントが必要になるため、in_arrayを使用しないでください。したがって、変更ですぐに中断します(つまり、現在の優先回答に従う場合、facebookのバージョン1.2は機能しません)。また、正規表現パターンを使用するよりも、配列を反復処理する方が遅くなります。
間違いなく後でもっと多くのボットを探したいと思うので、パイプでパターンに分割された2つのボット名の例を以下に示します。シンボル。末尾の/ iは、大文字と小文字を区別しません。
また、$ _ SERVER ['HTTP_USER_AGENT']を使用しないでください。ただし、誰かがそこに少し厄介なものが存在する場合に備えて、最初にフィルタリングする必要があります。
$pattern = '/(FacebookExternalHit|GoogleBot)/i';
$agent = filter_input(INPUT_SERVER, 'HTTP_USER_AGENT', FILTER_SANITIZE_ENCODED);
if(preg_match($pattern,$agent)){
echo "found one of the patters";
}
より安全で高速なコード。
PHPの別の一般的なアプローチ
$agent = $_SERVER['HTTP_USER_AGENT'];
$agent = trim($agent);
$agent = strtolower($agent);
if (
strpos($agent,'facebookexternalhit/1.1')===0
|| strpos($agent,'facebookexternalhit/1.0')===0
){
//probably facebook
}else{
//probably not facebook
}
上記のFacebookの回答は既にありますが、ユーザーエージェントを取得する方法の1つは、サイトにアクセスするとメールを送信するスクリプトをサイトに配置することです。たとえば、 https://example.com/user-agent.php のドメインでこのファイルを作成します。
<?php
mail('[email protected]', 'User Agent', $_SERVER['HTTP_USER_AGENT']);
次に、Facebookにアクセスし、そこでスクリプトへのリンクを入力して、スペースバーを押します。実際に何も共有する必要はありません。リンクを入力するだけで、スペースがあればFacebookがプレビューを取得します。その後、Facebookのユーザーエージェントにメールを送信する必要があります。