在 Node Express 中检测社交机器人
Detect social bots in Node Express
我正在尝试检测以下两个选项之一:
- 具体的机器人列表(FacebookExternalHit|LinkedInBot|TwitterBot|Baiduspider)
- 任何不支持 Crawable Ajax 规范的机器人
我见过类似的问题 (How to recognize Facebook User-Agent),但没有任何内容解释如何在 Node 和 Express 中执行此操作。
我需要按如下格式执行此操作:
app.get("*", function(req, res){
if (is one of the bots) //serve snapshot
if (is not one of the bots) res.sendFile(__dirname + "/public/index.html");
});
您可以做的是使用 request.headers
对象来检查传入请求是否包含任何特定于该机器人的 UA 信息。一个简单的例子。
节点
var http = require('http');
var server = http.createServer(function(req, res){
if(req.headers['user-agent'] === 'facebookexternalhit/1.1') /* do something for the Facebook bot */
});
server.listen(8080);
快递
var http = require('http');
var express = require('express');
var app = express();
app.get('/', function(req, res){
if(req.headers['user-agent'] === 'facebookexternalhit/1.1') /* do something for the Facebook bot */
});
app.listen(8080);
您可以检查请求中的 header User-Agent
object 并测试其对不同机器人的价值,
截至目前,Facebook 表示他们有三种类型的 User-Agent header 值(检查 The Facebook Crawler ), Also twitter has a User-Agent with versions ( check Twitter URL Crawling & Caching ),下面的示例应该涵盖这两种机器人。
节点
var http = require('http');
var server = http.createServer(function(req, res){
var userAgent = req.headers['user-agent'];
if (userAgent.startsWith('facebookexternalhit/1.1') ||
userAgent === 'Facebot' ||
userAgent.startsWith('Twitterbot') {
/* Do something for the bot */
}
});
server.listen(8080);
快递
var http = require('http');
var express = require('express');
var app = express();
app.get('/', function(req, res){
var userAgent = req.headers['user-agent'];
if (userAgent.startsWith('facebookexternalhit/1.1') ||
userAgent === 'Facebot' ||
userAgent.startsWith('Twitterbot') {
/* Do something for the bot */
}
});
app.listen(8080);
这个 node express 中间件将分析一堆不同的用户代理字符串,并给你一个 "bot==true" 或 "desktop==true" 的方法来确定。我没有使用过它,自述文件听起来它只是一个试用项目,所以我不知道它将如何维护它,但它会检测各种机器人。
我正在尝试检测以下两个选项之一:
- 具体的机器人列表(FacebookExternalHit|LinkedInBot|TwitterBot|Baiduspider)
- 任何不支持 Crawable Ajax 规范的机器人
我见过类似的问题 (How to recognize Facebook User-Agent),但没有任何内容解释如何在 Node 和 Express 中执行此操作。
我需要按如下格式执行此操作:
app.get("*", function(req, res){
if (is one of the bots) //serve snapshot
if (is not one of the bots) res.sendFile(__dirname + "/public/index.html");
});
您可以做的是使用 request.headers
对象来检查传入请求是否包含任何特定于该机器人的 UA 信息。一个简单的例子。
节点
var http = require('http');
var server = http.createServer(function(req, res){
if(req.headers['user-agent'] === 'facebookexternalhit/1.1') /* do something for the Facebook bot */
});
server.listen(8080);
快递
var http = require('http');
var express = require('express');
var app = express();
app.get('/', function(req, res){
if(req.headers['user-agent'] === 'facebookexternalhit/1.1') /* do something for the Facebook bot */
});
app.listen(8080);
您可以检查请求中的 header User-Agent
object 并测试其对不同机器人的价值,
截至目前,Facebook 表示他们有三种类型的 User-Agent header 值(检查 The Facebook Crawler ), Also twitter has a User-Agent with versions ( check Twitter URL Crawling & Caching ),下面的示例应该涵盖这两种机器人。
节点
var http = require('http');
var server = http.createServer(function(req, res){
var userAgent = req.headers['user-agent'];
if (userAgent.startsWith('facebookexternalhit/1.1') ||
userAgent === 'Facebot' ||
userAgent.startsWith('Twitterbot') {
/* Do something for the bot */
}
});
server.listen(8080);
快递
var http = require('http');
var express = require('express');
var app = express();
app.get('/', function(req, res){
var userAgent = req.headers['user-agent'];
if (userAgent.startsWith('facebookexternalhit/1.1') ||
userAgent === 'Facebot' ||
userAgent.startsWith('Twitterbot') {
/* Do something for the bot */
}
});
app.listen(8080);
这个 node express 中间件将分析一堆不同的用户代理字符串,并给你一个 "bot==true" 或 "desktop==true" 的方法来确定。我没有使用过它,自述文件听起来它只是一个试用项目,所以我不知道它将如何维护它,但它会检测各种机器人。