0

使用 Api 密钥,我能够从Api Explorer获取播放列表中的视频。在没有 OAuth 的情况下执行获取结果 json。链接在这里。
https://developers.google.com/apis-explorer/?hl=en_US#p/youtube/v3/youtube.playlistItems.list?part=snippet&playlistId=PLHyTuYqPkZCzt7mWZ4hmmrRdjLJiw6O2T&_h=2&

使用 Go on App 引擎实现相同的调用失败并出现以下错误:

获取 https://www.googleapis.com/youtube/v3/playlistItems?alt=json&part=snippet&playlistId=PLHyTuYqPkZCzt7mWZ4hmmrRdjLJiw6O2T:http.DefaultTransport 和 http.DefaultClient 在 App Engine 中不可用。请参阅 https://cloud.google.com/appengine/docs/go/urlfetch/

这是我使用的代码:

import (
    "net/http"
    "code.google.com/p/google-api-go-client/googleapi/transport"
    "code.google.com/p/google-api-go-client/youtube/v3"
    "log"
)

    var service *youtube.Service
    func init() {
        var err error
        log.Println("Apikey = ", apiKey)
        client := &http.Client{Transport: &transport.APIKey{Key: apiKey}}
        service, err = youtube.New(client)
        if err != nil {
            log.Println("ERROR in creating youtube New client ", err)
        }
        var items *youtube.PlaylistItemListResponse
        if items, err = service.PlaylistItems.List("snippet").PlaylistId("PLHyTuYqPkZCzt7mWZ4hmmrRdjLJiw6O2T").Do(); err != nil {
            log.Println("Error in fetching playlist items ", err) //this line shows the error
        }
        log.Println(Jsonify(items))
    }

截至目前,我在本地开发服务器上运行我的代码,即goapp serve

什么不见​​了?如何使用 v3 api 和 ApiKey 获取 youtube 播放列表视频?

4

2 回答 2

0

找到了解决方案。下面的代码为我完成了任务。

func FetchVideos(w http.ResponseWriter, r *http.Request) {
    var service *youtube.Service
    ctx := appengine.NewContext(r)

    transport := &transport.APIKey{
        Key:       apiKey,
        Transport: &urlfetch.Transport{Context: ctx}}
    client := &http.Client{Transport: transport}

    var err error
    service, err = youtube.New(client)
    if err != nil {
        log.Println("ERROR in creating youtube New client ", err)
    }
    var items *youtube.PlaylistItemListResponse
    if items, err = service.PlaylistItems.List("snippet").PlaylistId("PLHyTuYqPkZCzt7mWZ4hmmrRdjLJiw6O2T").Do(); err != nil {
        log.Println("Error in fetching playlist items ", err)
    }
    log.Println(Jsonify(items))
于 2016-01-03T23:05:37.857 回答
0

不幸的是,链接的文档并没有完全解释为什么您的代码不起作用。在 App Engine 上,您需要使用特殊http.Transport提供的urlfetch包;请参阅https://cloud.google.com/appengine/docs/go/urlfetch/

于 2016-01-03T08:05:35.687 回答