日志

必应API接口nodejs版

 来源    2020-09-16    1  

近期,在研究百度、必应、API等的url提交API时,发现有用Go语言做工具的大佬的分享 利用 API 自动向搜索引擎提交网址(Go语言版) - pyList

其中提到bing API提交方法,并给出了Go语言代码:

func Bing() {
    sUrl := "https://ssl.bing.com/webmaster/api.svc/json/SubmitUrl?apikey=xxxxxxxx"
    buf := bytes.NewBufferString(`{
"siteUrl":"https://pylist.com",
"url":"https://pylist.com/t/1581940902"
}`)
    req, err := http.NewRequest("POST", sUrl, buf)
    if err != nil {
        return
    }
    req.Header.Set("Content-Type", "application/json; charset=utf-8")

    resp, err := http.DefaultClient.Do(req)
    if err != nil {
        return
    }
    defer resp.Body.Close()
}

可以保存为: bing-push.go, 然后在本地执行哈~

而相比于go语言,我本人对node.js更熟悉一点~

必应API接口-单条提交

var request = require('request');
var options = {
    uri: 'https://ssl.bing.com/webmaster/api.svc/json/SubmitUrl?apikey=' + 'xxx', /* xxx需替换为你的key */
    method: 'POST',
    json: {
        "siteUrl": "http://geekplayers.com", /* 替换为你的站点,并且在Bing站长平台中验证过权限 */
        "url": "http://geekplayers.com/link.html"   /* 替换为你需要推送的url */
    }
};

request(options, function (error, response, body) {
    console.log("Bing response: ", body)
});

登录必应站长后台https://www.bing.com/webmasters,点右上角的设置按钮(齿轮⚙),找到你的key:

Step 1:

Step 2:

然后将上述代码中的xxx替换为你的key。

先保存文件为: bing-SingleSumbit.js,

然后在当前目录下打开命令行,输入 npm install request,

接下来改好key, siteurl, url等值后,就可以在命令行中运行:

node bing-SingleSumbit.js

必应API接口-批量提交

批量提交 - 版本1

var request = require('request');
var myJson = {
    "siteUrl": "http://geekplayers.com",
    "urlList": [
        "http://geekplayers.com/link.html",
        "http://geekplayers.com/about.html",
        "http://geekplayers.com/blog/"
    ]
};
request({
    url: 'https://ssl.bing.com/webmaster/api.svc/json/SubmitUrlbatch?apikey=' + 'xxx', /* xxx需替换为你的key */
    method: "POST",
    json: true,   // <--Very important!!!
    body: myJson
}, function (error, response, body) {
    console.log(body);
});

我记得这里有个跨域的问题, 设置 json: true 即可解决。

先将代码保存为: bing-BatchSumbit.js.

运行方法,同上~

批量提交 - 改进1

在上一版本的基础上可以改进,即:把多条url先按行放进link.txt中,然后读取处理~

var fs = require('fs');
var readline = require('readline');
var path = require('path')

function readFileToArr(fReadName, callback) {
    var arr = [];
    var readObj = readline.createInterface({
        input: fs.createReadStream(fReadName)
    });

    readObj.on('line', function (line) {
        arr.push(line);
    });
    readObj.on('close', function () {
        console.log('readLine close....');
        callback(arr);
    });
}

// var urlsFile = path.resolve(__dirname, 'links.txt').replace(/\\/g, '/');  // For Windows
var urlsFile = path.resolve(__dirname, '..', 'nodejs', 'links.txt'); /* 兼容 Windows/Linux, 这里nodejs为上级文件夹名 */

readFileToArr(urlsFile, function (arr) {
    var request = require('request');
    var myJson = {
        "siteUrl": "http://geekplayers.com",
        "urlList": arr
    };
    
    request({
        url: 'https://ssl.bing.com/webmaster/api.svc/json/SubmitUrlbatch?apikey=' + 'xxx',
        method: "POST",
        json: true,   // <--Very important!!!
        body: myJson
    }, function (error, response, body) {
        console.log(body);
    });
});

保存文件为: bing-BatchSumbit2.js

命令行中用cd命令切换到当前目录,然后依次输入:

npm install fs
npm install readline
npm install path

改好key, siteurl, url等值后,并在当前目录创建文件links.txt并填入需要推送的多条url,就可以在命令行中运行:

node bing-BatchSumbit2.js

批量提交 - 改进2

上一版本的代码中,links.txt的内容是手动添加的,那我们可不可以从sitemap.xml获取并直接转换为.txt供后面使用呢?当然可以,于是另外写了一段node.js代码做这个事。

var fs = require('fs');
var request = require('request');
const cheerio = require('cheerio');

request('https://www.geekplayers.com/sitemap.xml', function (error, response, html) {
    if (!error && response.statusCode == 200) {
        var $ = cheerio.load(html, {
            xmlMode: true
        });

        textFile = 'myLink.txt';
        fs.open(textFile, 'wx', (err, fd) => {
            if (err) {
                if (err.code === 'EEXIST') {
                    console.error('myfile already exists');
                    
                    fs.unlinkSync(textFile);  // Remove file
                }
            }

        });

        const nodes = $('loc');
        var arr = [];
        
        for (i = 0; i < nodes.length; i++) {
            arr[i] = nodes[i].firstChild.data;

            fs.appendFile(textFile, arr[i] + '\r\n', function (err) {
                if (err) {
                    console.error('One line converted failed.'); // append failed
                } else {
                    // console.error('One line converted done!');
                }                
            })
        }

        console.error('Converted done!');
    }
});

// Reference: https://stackoverflow.com/a/25012834/6075331

先保存代码为: sitemapInXMLtoText.js,

命令行中用cd命令切换到当前目录,然后依次输入:

npm install fs
npm install request
npm install cheerio

改好key, siteurl, url等值后,就可以在命令行中运行:

node sitemapInXMLtoText.js

接下来只需将request调用时的第一个参数改为你的sitemap.xml的网址即可~

最后再到命令行中执行一次:

node bing-BatchSumbit2.js

Bing还提供了其他API接口

GetKeywordStats - Bing

https://ssl.bing.com/webmaster/api.svc/json/GetKeywordStats?q=dog%20beds&country=be&language=nl-BE&apikey=...

RSS Feed提交:

https://bing.com/webmaster/api.svc/json/SubmitFeed

获取用户验证后的站点信息:

https://ssl.bing.com/webmaster/api.svc/json/GetUserSites

有兴趣的朋友可以继续深入研究哈, 欢迎在评论区留言交流~

作 者: 极客玩家大白
首发于: 必应API接口nodejs版 - 极客玩家大白

node.js – 使用Google Contacts API 3.0版和NodeJS’Passport同步联系人
问答我正在使用护照,并希望使用Google Contacts API version 3.0将Google联系人与我的应用程序同步(这将突然变得有用10倍). 有人这样做过吗?如果是这样,你有一些示例代码 ...
1
Java版阿里云通信短信发送API接口实例(新)
日志阿里云通信(原名阿里大于)的短信服务(Short Message Service)是阿里云为用户提供的一种通信服务的能力,支持快速发送短信验证码.短信通知等. 完美支撑双11期间2亿用户,发送6亿短信 ...
1
Asp.Net支付宝手机网站支付接口API之C#版
日志一.准备工作 1.使用企业支付宝签约手机网站支付 2.下载支付宝官方demo 文档地址:https://doc.open.alipay.com/doc2/detail?treeId=60&ar ...
1
Yii2 基于RESTful架构的 advanced版API接口开发 配置、实现、测试 (转)
日志环境配置: 开启服务器伪静态 本处以apache为例,查看apache的conf目录下httpd.conf,找到下面的代码 LoadModule rewrite_module modules/mod_ ...
nodejs+express+mongodb写api接口的简单尝试
日志1:启动mongodb服务 我的mongoDB的安装目录:E:\mongoDB\bin,版本:3.4.9 打开cmd  -> e:(进入e盘) -> cd mongoDB/bin(进入mo ...
1
Yii2 基于RESTful架构的 advanced版API接口开发 配置、实现、测试
日志环境配置: 开启服务器伪静态 本处以apache为例,查看apache的conf目录下httpd.conf,找到下面的代码 LoadModule rewrite_module modules/mod_ ...
1
hbase rest api接口链接管理golang语言版
日志# go-hbase-resthbase rest api接口链接管理[golang语言版]关于hbase的rest接口的详细信息可以到官网查看[http://hbase.apache.org/boo ...
1
使用WeCloud消息推送接口发送消息NodeJs版
日志WeCloud是一家初创公司的产品,眼下主要在做Android和IOS消息推送这块.他们提供了用于向设备发送消息的协议,详细协议内容见消息推送协议. 这篇文章将使用NodeJs基于这个推送协议完毕向A ...
1
ruby-on-rails – 与Rails中的第三方API接口? (操作URL和解析XML/JSON)
问答我正在开发一个需要与多个第三方API接口的Rails项目.我对Rails很新,我从来没有这样做,所以我在这里缺少一些基本信息.具体来说,简单地查询外部URL的首选Rails方式是什么? 在PHP世界中 ...
1
如何使用google-api-javascript-client或“Contacts API 3.0版”从gmail导入联系人?
问答我使用2.0版本的Contacts API和Gdata库来导入客户gmail信息.此版本不再受支持,我尝试移至V3,但我看到vd不支持Gdata,我花了一天试图修改当前代码以使用javascript的 ...
javascript – api调用Nodejs之间的延迟
问答我正在使用Nodejs来实现一个Web应用程序.我有一个对象列表,我想为每个对象调用第三方API.问题是api有速率限制所以根据我的计算,我必须每1.5秒调用一次api.我尝试使用setTimeout ...
1
node.js – 用mongoose api和nodejs搜索数据库?
问答即时通讯使用nodejs和mongoose来构建一个api,我试图做搜索功能,但它似乎查询任何东西,代码. app.get('/search', function(req,res){ return Q ...
2
javascript – 在grunt上运行Karma时警告’API接口已更改’
问答当从grunt任务运行业力时,我得到以下警告: Running "karma:unit" (karma) task Warning: The api interface has c ...
ReSpec与Bikeshed:如何记录和发布由许多供应商实施的标准REST API接口?
问答我们想要记录一个标准的REST API接口,该接口将由许多供应商实现.目前,我们正在使用Google文档来存储规范. 要求(对大多数人来说必须是共同的): >规范历史:我们希望能够引用规范的先前 ...
1
在C#中定义Windows API接口时,是否必须定义所有成员?我可以只定义我要使用的方法吗?
问答例如,这是从Pinvoke站点获取的IFileOpenDialog接口(Windows Shell接口)的完整定义: [ComImport, Guid ( "d57c7288-d4ad-47 ...
c – 设计一个更好的API接口,将结构从一个类传递给另一个类
问答我坚信以下设计理念: 1 GT;应尽可能在存储数据的地方实施服务. 2 – ; Getter和Setter是邪恶的,应该小心使用. 我宁愿不在这里争论两个论点,并假设他们有自己的优势. 这是我目前面临 ...
1
PHP TWITTER bot使用api 1.1版和游标来关注/取消关注
问答此代码应该只取消关注没有追踪的用户,但它取消了一些粉丝,无法弄清楚原因. $oTwitter = new TwitterOAuth (...) $aFollowing = $oTwitter-> ...
1
域驱动设计 – DDD – 第三方API接口应该在哪里?
问答如果我们考虑标准持久性存储库,解决方案很容易.我们将IStuffRepository放在Domain Layer中,将StuffRepositoryImplementation放在Infrastruc ...
2
c – Ruby win32 api接口
问答我需要在ruby中访问win32库的一些函数.我在网上找到了关于Win32API类的非常稀少的信息,所以我在这里问. 我知道你可以这样做: function = Win32API.new('user3 ...
1
GeoDjango,用于PointField与Google Maps V3 API接口的SRID是什么?
问答我有点困惑,我应该在我的GeoDjango PointField中设置我的SRID值,以便在地址通过谷歌地图api进行地理编码的情况下保持准确到坐标和通过django-postgis查询的距离? 我得 ...
1