为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用 Go on 应用引擎获取 youtube 播放列表视频

如何使用 Go on 应用引擎获取 youtube 播放列表视频

Go
函数式编程 2021-12-06 16:55:23
使用 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 播放列表视频?
查看完整描述

2 回答

?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

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

查看完整回答
反对 回复 2021-12-06
?
慕姐8265434

TA贡献1813条经验 获得超2个赞

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


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))


查看完整回答
反对 回复 2021-12-06
  • 2 回答
  • 0 关注
  • 165 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信