2011-05-04 13 views
13

मेरे पास रेल ऐप हैं, जो प्रत्येक अनुरोध से प्रत्येक यूआरएल से विशिष्ट यूआरएल दर्ज करते हैं, लेकिन मेरे आईपी डेटाबेस में मुझे 66.220.15 की तरह फेसबुक ब्लोक आईपी मिला है। * और Google आईपी (मुझे सुझाव है कि यह बॉट से आती है) । रोबोट या सर्च इंजन स्पाइडर द्वारा अनुरोध से आईपी निर्धारित करने के लिए कोई सूत्र है? धन्यवादरेल पर रूबी, यह निर्धारित करने के लिए कि क्या रोबोट या सर्च इंजन स्पाइडर द्वारा अनुरोध किया गया था?

उत्तर

12

रोबोटों को उनके अनुरोध के साथ उपयोगकर्ता-एजेंट के साथ भेजने के लिए (किसी भी प्रकार के कानून से अधिक सामान्य/सौजन्य से) आवश्यक है। आप request.env["HTTP_USER_AGENT"] का उपयोग कर इसके लिए जांच कर सकते हैं और कृपया जितनी चाहें फ़िल्टर कर सकते हैं।

+0

धन्यवाद रयान, हाँ मैं रोबोट उपयोगकर्ता-एजेंट की तरह की एक सरणी बनाने: AM_I_ROBOT = [ "Googlebot", "twitterbot", "facebookexternalhit", "http://www.google .com/bot.html ", " http://www.facebook.com/externalhit_uatext.php ", " tweetmemebot "," sitebot "," msnbot "," robot "," bot "] –

+0

यहां एक सूची है उपयोगकर्ता एजेंटों का: http://www.user-agents.org/ एक XML फ़ीड के साथ: http://www.user-agents.org/allagents.xml –

+1

यह गिस्ट सभी खोज इंजन बॉट्स का नाम प्राप्त करता है और एसपी user-agents.org से एम्सर्स और उन्हें एक सरणी में फेंकता है: https://gist.github.com/1121578 यह एक बहुत लंबी सूची है। –

27

के बाद से अच्छी तरह व्यवहार बॉट कम से कम आम तौर पर यूए स्ट्रिंग में एक संदर्भ यूआरआई वे भेजने के लिए, की तरह कुछ में शामिल हैं:

request.env["HTTP_USER_AGENT"].match(/\(.*https?:\/\/.*\)/) 

यदि अनुरोध एक मानव बनाम एक बॉट से है देखने के लिए एक आसान तरीका है उपयोगकर्ता का एजेंट यह एक व्यापक सूची के खिलाफ मैच करने की कोशिश करने से अधिक मजबूत लगता है।

+1

+1 हालांकि, इस चतुर समाधान के लिए, ध्यान रखें कि ट्विटर इस नियम का पालन नहीं करता है, 'request.env [" HTTP_USER_AGENT "] का उपयोग करें। (/Twitterbot\/1.0/) 'इसके बजाय मिलान करें। –

+0

हालांकि यह शायद अधिकांश खोज इंजन बॉट को पकड़ने के लिए एक चालाक समाधान है, लेकिन यह बरकरार रखने योग्य नहीं है और संभवतः कई बॉट –

8

मुझे लगता है कि आप चेक बॉट के लिए ब्राउज़र मणि का उपयोग कर सकते हैं।

if browser.bot? 
    # code here 
end 

https://github.com/fnando/browser

+0

याद आती है, जबकि यह लिंक प्रश्न का उत्तर दे सकता है, यहां उत्तर के आवश्यक हिस्सों को शामिल करना बेहतर है और प्रदान करना बेहतर है संदर्भ के लिए लिंक। लिंक किए गए पृष्ठ में परिवर्तन होने पर लिंक-केवल उत्तर अमान्य हो सकते हैं। - [समीक्षा से] (/ समीक्षा/कम गुणवत्ता वाली पोस्ट/110 9 7150) –

+0

धन्यवाद @ पारदीप-डुंग्रा, मैं इसे बदलता हूं – dimasjt

+0

यह समाधान मेरे लिए काम करता है, धन्यवाद! –

संबंधित मुद्दे

 संबंधित मुद्दे