使用Node / JavaScript找出首先猜测的域名完全限定URL

时间:2016-06-13 11:39:53

标签: javascript node.js

用于

等输入域
web.whatsapp.com
facebook.com
electron.atom.io

我想查找通过Chrome导航栏或Google搜索运行时会弹出的完全限定的网址。所以输出将是

https://www.facebook.com
https://web.whatsapp.com/
http://electron.atom.io/

解决方案至少可以找到协议,并且 - 比如上面的facebook示例 - 找到第一个最佳域的路径。我尝试了谷歌自定义搜索API(非免费)和节点的基本http / https对象,只是不接受域。

感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

NodeJS有一个名为dns的模块,可以解决几乎所有错误/半格式的链接:

例如resolve4()会将dns解析为ipv4:

const dns = require('dns');

dns.resolve4('nodejs.org', (err, addresses) => {
  if (err) throw err;

  console.log(`addresses: ${JSON.stringify(addresses)}`);

  addresses.forEach((a) => {
    dns.reverse(a, (err, hostnames) => {
      if (err) {
        throw err;
      }
      console.log(`reverse for ${a}: ${JSON.stringify(hostnames)}`);
    });
  });
});

还有lookup(hostname[, options], callback)dns.resolve(hostname[, rrtype], callback)

其中一个应该是适合您的有效解决方案。

我指的文件:

DNS Documentation in NodeJS

答案 1 :(得分:1)

好的,在更好的事情发生之前,我将使用免费的duckduckgo API并使用第一个搜索结果中的URL。

var lookupFullyQualifiedURL = function ( urlIn, callback ) {
    if(!(typeof callback === "function")) {
        callback = function() {};
    }
    var request = require("request");
    if (urlIn == undefined )
        return urlIn;
    const srcUrl = "https://duckduckgo.com/?q=" + urlIn + "&format=json";
    request(srcUrl, function (error, response, body) {
        if (!error && response.statusCode == 200) {

            var json = JSON.parse(body);
            try {
                var urlOut = json.Results[0].FirstURL;
                callback(urlIn, urlOut);
            } catch (err) {
                callback(urlIn, undefined);
            }
        }
    })
}

var callback = function ( input, output ) {
    console.log(input + " >> " + output);
}

lookupFullyQualifiedURL("facebook", callback);
lookupFullyQualifiedURL("facebook.com", callback);
lookupFullyQualifiedURL("github", callback);
lookupFullyQualifiedURL("trello.com", callback);
lookupFullyQualifiedURL("whatsapp", callback);
lookupFullyQualifiedURL("web.whatsapp.com", callback);
lookupFullyQualifiedURL("whatsapp", callback);
lookupFullyQualifiedURL("spotify", callback);

输出是这样的:

web.whatsapp.com >> undefined
whatsapp >> https://www.whatsapp.com/
whatsapp >> https://www.whatsapp.com/
trello.com >> https://trello.com
github >> https://github.com/
spotify >> https://www.spotify.com
facebook >> https://www.facebook.com/
facebook.com >> https://www.facebook.com/

仍有改进的余地。例如,对于web.whatsapp.com,不返回任何内容。这是由于某些API limitations of DuckDuckGo