首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用GoQuery获取视频资源返回空白

使用GoQuery获取视频资源返回空白
EN

Stack Overflow用户
提问于 2014-08-27 10:09:32
回答 3查看 1.2K关注 0票数 1

我正在尝试用GoQuery获取一条藤条的.mp4视频源。然而,当我运行它时,我什么也得不到,没有错误,也没有返回。只有一行空行。

代码语言:javascript
复制
package main

import (
  "fmt"
  "log"

  "github.com/PuerkitoBio/goquery"
)

func getMP4URL() {
  doc, err := goquery.NewDocument("https://vine.co/v/MlWtKgwh7WY")
  if err != nil {
    log.Fatal(err)
  }

  doc.Find(".vine-video-container").Each(func(i int, s *goquery.Selection) {
    mp4, _ := s.Find("video").Attr("src")
    fmt.Printf("MP4: %s", mp4)
  })
}

func main() {
  getMP4URL()
}

这是我的代码的问题,还是vine本身的问题?

EN

回答 3

Stack Overflow用户

发布于 2014-08-27 10:17:49

如果我添加

代码语言:javascript
复制
html, err := doc.Html()
if err != nil {
    log.Fatal(err)
}

log.Println(html)

doc.Find之前,html输出中没有.vine-video-container

票数 0
EN

Stack Overflow用户

发布于 2014-08-27 10:37:56

尝试以下代码:)

代码语言:javascript
复制
package main

import (
    "fmt"
    "log"

    "github.com/PuerkitoBio/goquery"
)

func getMP4URL() {
    doc, err := goquery.NewDocument("https://vine.co/v/MlWtKgwh7WY")
    if err != nil {
        log.Fatal(err)
    }

    doc.Find("meta").Each(func(i int, s *goquery.Selection) {
        op, _ := s.Attr("itemprop")
        if op == "contentURL" {
            fmt.Println(s.Attr("content"))
        }
    })
}

func main() {
    getMP4URL()
}
票数 0
EN

Stack Overflow用户

发布于 2016-04-19 00:17:04

Vine将JSON格式的视频元数据嵌入到<script type="application/ld+json">中。因此,您需要从标记中提取JSON blob,并解码JSON以获得视频的src。

以下是获取Vine video的src URL的完整工作代码:

代码语言:javascript
复制
package main

import (
    "encoding/json"
    "github.com/PuerkitoBio/goquery"
)

type SharedContent struct {
    ContentUrl string `json:"contentUrl"`
}

type VineVideoMetadata struct {
    SC SharedContent `json:"sharedContent"`
}

func DecodeVineJsonBlob(blob string) VineVideoMetadata {
    meta := VineVideoMetadata{}
    err := json.Unmarshal([]byte(blob), &meta)
    if err != nil {
        panic(err)
    }
    return meta
}

func GetVineVideoJsonBlob(url string) string {
    doc, err := goquery.NewDocument(url)
    if err != nil {
        panic(err)
    }

    return doc.Find("script[type=\"application/ld+json\"]").Text()
}

func GetVineVideoSrc(url string) string {
    jsonBlob := GetVineVideoJsonBlob(url)
    meta := DecodeVineJsonBlob(jsonBlob)
    return meta.SC.ContentUrl
}

func main() {
    println(GetVineVideoSrc("https://vine.co/v/MlWtKgwh7WY"))
}

输出:

代码语言:javascript
复制
https://mtc.cdn.vine.co/r/videos/67FAC9DFA21115619347885645824_22a564aec15.5.0.17428816123715427422.mp4?versionId=4zcm5ySoFhqUQBXU7Ehm3YOuOSjFbkg3
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25517885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档