2017-05-29 30 views
-1

我目前正在致力於facebook分享,並且似乎在Facebook上與C#共享的主題並不多。想學的東西......在mvc /剃鬚刀視圖中檢測facebook抓取工具

我的Open Graph meta標籤中的剃刀視圖中的一個象下面這樣:

<head> 
    <meta name="viewport" content="width=device-width" /> 
    <title>Hello World!</title> 
    <meta property="fb:app_id" content="************" /> 
    <meta property="og:site_name" content="www.hello-world.com" /> 
    <meta property="og:type" content="website" /> 
    <meta property="og:url" content="http://hello-world.com/home/fbshare" /> 
    <meta property="og:title" content="How are you doing today?" /> 
    <meta property="og:description" content="Great to know you are doing fine." /> 
    <meta name="author" content="Hello" /> 
    <meta property="og:image" content="https://images.pexels.com/photos/2324/skyline-buildings-new-york-skyscrapers.jpg?w=940&h=650&auto=compress&cs=tinysrgb" /> 
    <meta property="og:image:type" content="image/jpeg" /> 
    <meta property="og:image:width" content="800" /> 
    <meta property="og:image:height" content="420" /> 
</head> 

對於普通用戶,我想他們從這種觀點就像下面重定向到別的地方:

@{Response.Redirect("Somewhere in my application")}; 

但我不想重定向Facebook的刮板。無論如何,我可以識別Facebook或Facebook的刮板用戶代理,如果我發現這是Facebook的用戶代理不重定向他的任何其他地方重定向他們從視圖到別的地方。

P.S:根據facebook官方文檔,我必須找到Facebook用戶代理,並允許他們刮我的Open Graph元標記,但我無法挖掘出一種方式。

Facebook抓取工具需要能夠以 的順序訪問您的內容才能正確抓取和分享。您的網頁應該可以被 抓取工具看到。如果您需要登錄或以其他方式限制訪問您的 內容,則需要將我們的抓取工具列入白名單。您還應該免除DDoS保護機制。

如果在抓取時內容不可用,您可以通過將URL傳遞給 共享調試器,強制 重新抓取。

Facebook的履帶可以通過這些用戶代理字符串來標識:

facebookexternalhit/1.1 (+ http://www.facebook.com/externalhit_uatext.php) OR facebookexternalhit/1.1

回答

0

您是否嘗試過:

var userAgent = HttpContext.Request.Headers["User-Agent"]; 
if (userAgent != null && 
    userAgent.Contains("facebookexternalhit/")) 
{ 
    // Is a Facebook agent 
} 
else 
{ 
    // Is not a Facebook agent 
} 

當然,在MVC中,您不應該從視圖重定向,只能從控制器filter重定向。

+0

沒有運氣,它仍然將scrapper重定向到我爲重定向定義的操作。任何想法? – Newbie

+0

我根據[這裏](https://stackoverflow.com/a/9031912/181087)更改了我的答案。用戶代理字符串中的信息可能比實際代理傳遞的信息多。您應該設置代碼以記錄標題中的實際內容,以便隨後可以設置正確的條件。 – NightOwl888

+0

我試圖登錄用戶代理,但實際上它是空的。日誌中保存的文本文件爲空,不顯示任何內容。可能是什麼問題呢? – Newbie