Node.js和Google Pagespeed API

问题描述:

我试图在Node中构建一个Google Pagespeed客户端,但我正在与https客户端苦苦挣扎。请求总是以302响应返回,但完全相同的网址完全在卷曲和浏览器Node.js和Google Pagespeed API

options = { 
    host: 'https://www.googleapis.com' 
    , path: '/pagespeedonline/v1/runPagespeed?url=' + program.uri + '/&prettyprint=false&strategy=' + program.strategy + '&key=' + program.key 
} 

https.get(options, function(res) { 
    console.log("statusCode: ", res.statusCode); 
    console.log("headers: ", res.headers); 
    res.on('data', function(d) { 
     process.stdout.write(d); 
    }); 
}).on('error', function(e) { 
    console.error(e); 
}); 

我缺少的东西?试图发送几个不同的标题,但它没有太大的区别

删除主机中的https://前缀,你应该很好去。请参阅docs here

这里的工作的例子,刚刚替补自己的URL和API密钥:

 
var https = require('https'), 
    key = 'KEY', 
    url = 'URL', 
    strategy = 'desktop'; 

https.get({ 
    host: 'www.googleapis.com', 
    path: '/pagespeedonline/v1/runPagespeed?url=' + encodeURIComponent(url) + 
      '&key='+key+'&strategy='+strategy 
    }, function(res) { 
     console.log("statusCode: ", res.statusCode); 
     console.log("headers: ", res.headers); 

     res.on('data', function(d) { 
     process.stdout.write(d); 
     }); 
}).on('error', function(e) { 
    console.error(e); 
}); 
+0

真棒,非常感谢! – 2012-04-18 07:37:29

您可以使用谷歌的节点客户端库为它的API。

var googleapis = require('googleapis'); 
googleapis.load('pagespeedonline', 'v1', function(err, client) { 
    // set your api key 
    client = client.withApiKey('...'); 
    var params = { url: '...', strategy: '...' }; 
    var request = client.pagespeedonline.pagespeedapi.runpagespeed(params); 
    request.execute(function (err, result) { 
    console.log(err, result); 
    }); 
}); 

客户端库还支持对您的情况可能有用的批量请求。更多文档是https://github.com/google/google-api-nodejs-client

google-api-nodejs-client是谷歌正式支持的用于访问Google API的node.js客户端库。

npm install googleapis 

对于PageSpeed Insights的API,它现在服用点是这样的:

require('googleapis') 
    .discover('pagespeedonline', 'v1') 
    .execute(function (err, psclient) { 
     var params = { url: URLHERE }; // others params https://developers.google.com/speed/docs/insights/v1/getting_started 
     var request = psclient.pagespeedonline.pagespeedapi.runpagespeed(params).withApiKey(YOUR_API_KEY);; 
     request.execute(function (err, result) { 
      //do something 
     }); 
    });