【发布时间】:2018-07-28 03:43:27
【问题描述】:
我的 Firebase Cloud Function 中有以下代码,它应该进行 youtube.search.list API 调用。
const admin = require('firebase-admin');
const functions = require('firebase-functions');
const {google} = require('googleapis');
const util = require('util')
const API_KEY = '<API_KEY>';
admin.initializeApp(functions.config().firebase);
const db = admin.firestore();
exports.minutely_job =
functions.pubsub.topic('minutely-tick').onPublish((event) => {
var urlshortener = google.urlshortener('v1');
var youtube = google.youtube({version: 'v3', auth: API_KEY});
var request = youtube.search.list({
part: 'snippet',
type: 'video',
q: 'Helge Schneider',
maxResults: 10
}, (err,response) => {
var docRef = db.collection('collection').doc('document');
console.log(util.inspect(response, {showHidden: true, depth: null}));
return 0;
});
return 0;
});
此代码不会引发错误。日志语句
console.log(util.inspect(response, {showHidden: true, depth: null}));
显示响应对象,它不包含任何预期的视频 sn-ps。
info
minutely_job
{ status: 200,
statusText: 'OK',
headers:
{ expires: 'Sat, 17 Feb 2018 09:57:02 GMT',
date: 'Sat, 17 Feb 2018 09:57:02 GMT',
'cache-control': 'private, max-age=120, must-revalidate, no-transform',
etag: '"_gJQceDMxJ8gP-8T2HLXUoURK8c/NXy4AB-_wkPIjb5PPZ6-2KGo-xg"',
vary: 'Origin, X-Origin',
'content-type': 'application/json; charset=UTF-8',
'x-content-type-options': 'nosniff',
'x-frame-options': 'SAMEORIGIN',
'x-xss-protection': '1; mode=block',
'content-length': '10092',
server: 'GSE',
'alt-svc': 'hq=":443"; ma=2592000; quic=51303431; quic=51303339; quic=51303338; quic=51303337; quic=51303335,quic=":443"; ma=2592000; v="41,39,38,37,35"',
connection: 'close' },
config:
{ adapter: [Function: httpAdapter],
transformRequest: { '0': [Function: transformRequest] },
transformResponse: { '0': [Function: transformResponse] },
timeout: 0,
xsrfCookieName: 'XSRF-TOKEN',
xsrfHeaderName: 'X-XSRF-TOKEN',
maxContentLength: -1,
validateStatus: [Function: validateStatus],
headers:
{ Accept: 'application/json, text/plain, */*',
'User-Agent': 'google-api-nodejs-client/1.2.1' },
method: 'get',
url: 'https://www.googleapis.com/youtube/v3/search',
paramsSerializer: [Function],
data: undefined,
params:
{ part: 'snippet',
type: 'video',
q: 'Helge Schneider',
maxResults: 10,
key: '***********************' } },
request:
ClientRequest {
domain: null,
_events:
{ socket: [Function],
abort: [Function],
aborted: [Function],
error: [Function],
timeout: [Function],
prefinish: [Function: requestOnPrefinish] },
_eventsCount: 6,
_maxListeners: undefined,
output: [],
outputEncodings: [],
outputCallbacks: [],
outputSize: 0,
writable: true,
_last: true,
upgrading: false,
chunkedEncoding: false,
shouldKeepAlive: false,
useChunkedEncodingByDefault: false,
sendDate: false,
_removedHeader: {},
_contentLength: 0,
_hasBody: true,
_trailer: '',
finished: true,
_headerSent: true,
socket:
TLSSocket {
_tlsOptions:
{ pipe: null,
secureContext: SecureContext { context: SecureContext {}, singleUse: true },
isServer: false,
requestCert: true,
rejectUnauthorized: true,
session: undefined,
NPNProtocols: undefined,
ALPNProtocols: undefined,
requestOCSP: undefined },
_secureEstablished: true,
_securePending: false,
_newSessionPending: false,
_controlReleased: true,
_SNICallback: null,
servername: null,
npnProtocol: false,
alpnProtocol: false,
authorized: true,
authorizationError: null,
encrypted: true,
_events:
{ close:
[ [Function],
{ [Function: g] listener: [Function] },
[Function: onClose],
[Function: socketCloseListener] ],
end: { [Function: g] listener: [Function: onend] },
finish: [Function: onSocketFinish],
_socketEnd: [Function: onSocketEnd],
secure: [Function],
free: [Function: onFree],
agentRemove: [Function: onRemove],
drain: [Function: ondrain],
error: [Function: socketErrorListener] },
_eventsCount: 9,
connecting: false,
_hadError: false,
_handle: null,
_parent: null,
_host: 'www.googleapis.com',
_readableState:
ReadableState {
objectMode: false,
highWaterMark: 16384,
buffer: BufferList { head: null, tail: null, length: 0 },
length: 0,
pipes: null,
pipesCount: 0,
flowing: true,
ended: false,
endEmitted: false,
reading: true,
sync: false,
needReadable: true,
emittedReadable: false,
readableListening: false,
resumeScheduled: false,
defaultEncoding: 'utf8',
ranOut: false,
awaitDrain: 0,
readingMore: false,
decoder: null,
encoding: null },
readable: false,
domain: null,
_maxListeners: undefined,
_writableState:
WritableState {
objectMode: false,
highWaterMark: 16384,
needDrain: false,
ending: true,
ended: true,
finished: true,
decodeStrings: false,
defaultEncoding: 'utf8',
length: 0,
writing: false,
corked: 0,
sync: false,
bufferProcessing: false,
onwrite: [Function],
writecb: null,
writelen: 0,
bufferedRequest: null,
不幸的是,Log-Statement 在这里被截断了。但我没有从 response.items 中得到任何信息,所以我认为响应中不包含任何视频。
【问题讨论】:
-
嗨。你得到什么了吗?我也面临这种问题
-
嗨,我最终使用了“request”模块而不是“googleapis”模块。我会回答的。
标签: node.js google-cloud-functions youtube-data-api