【问题标题】:Make a Youtube Data API request in Firebase Cloud Function在 Firebase Cloud Function 中发出 Youtube Data API 请求
【发布时间】: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


【解决方案1】:

您可以使用“请求”模块代替“googleapis”模块。

const request = require('request');
const API_KEY = '************';


var url = "https://www.googleapis.com/youtube/v3/search?part=snippet&safeSearch=strict&maxResults=5&videoSyndicated=true&videoEmbeddable=true&q=Helge&type=video&key=" + API_KEY;
request(url, function (error, response, body) {
    if (!error && response.statusCode == 200) {
        obj = JSON.parse(body);
        var items = obj.items;
    }});

【讨论】:

  • 我在 spark 模式下尝试,但它不起作用。说需要计费。有没有办法解决这个问题
  • 您无法通过 spark 计划访问云功能中的 Youtube Data API。您需要其他定价计划之一。
  • 不,您可以使用 Google 的所有 API,而无需切换到付费计划。那个时候有效,对我来说问题是别的。
猜你喜欢
  • 2019-01-27
  • 2021-04-26
  • 2018-09-13
  • 2019-11-17
  • 2017-09-15
  • 2020-10-26
  • 1970-01-01
  • 2021-06-18
  • 1970-01-01
相关资源
最近更新 更多