go -twitter API извлекает URL видео - PullRequest
0 голосов
/ 07 апреля 2020

Конечная цель здесь:

  1. Пользователь упоминает дескриптор моего приложения в твиттере в ответе какого-то твита
  2. Мой скрипт извлекает идентификатор оригинального твита
  3. получает его json ответ и извлекает из него фактический URL видео.

Моя проблема:

Я могу добраться до точки, где я могу напечатать твит. Текст, но что-нибудь еще чем это бросает ошибку, связанную с адресом памяти. Я новичок в Go и до сих пор не использовал указатели, поэтому я предполагаю, что проблема лежит где-то там.

Мой код (игнорируйте комментарии в нем, я вставил его как есть, чтобы вы могли легко обратиться к ошибке) ->

// ExtendedEntity is a []MediEntity, now we need to figure out how to access the details in it
package main

import (
    "fmt"

    "github.com/dghubble/go-twitter/twitter"
    "github.com/dghubble/oauth1"
)

func main() {
    config := oauth1.NewConfig("asd", "asd")
    token := oauth1.NewToken("asd-V65ynQCN5vxWi72MGqfwF7WqYqdUZh", "asd")
    httpClient := config.Client(oauth1.NoContext, token)
    client := twitter.NewClient(httpClient)

    params := &twitter.StreamFilterParams{
        Track: []string{"@bulundindia1337"},
        // StallWarnings: twitter.Bool(true),
    }

    stream, _ := client.Streams.Filter(params)
    // fmt.Printf("%T", stream)
    // v := <-stream.Messages
    // fmt.Println(v)

    demux := twitter.NewSwitchDemux()
    demux.Tweet = func(tweet *twitter.Tweet) {
        fmt.Println("text > ", tweet.Text)
        fmt.Println("tweet ID > ", tweet.ID)
        parentTweetID := tweet.InReplyToStatusID
        fmt.Println("Parent tweet id > ", parentTweetID)
        a := parseURL(parentTweetID, client)
        fmt.Println(a)
        // fmt.Println(parentTweet.ExtendedTweet.ExtendedEntities)
        //fmt.Println(parentTweet.Text)
        //fmt.Println(parentTweet.ExtendedEntities)
    }

    for message := range stream.Messages {
        demux.Handle(message)
    }
}

func parseURL(tweetID int64, c *twitter.Client) twitter.MediaEntity {
    status, _, err := c.Statuses.Show(tweetID, nil)
    if err != nil {
        fmt.Println(err)
    }
    return status.ExtendedEntities.Media[0]
}

Вывод при запуске потока ->

nish@b0x:~/Documents/go/twitube$ go run main.go 
text >  @thevirdas @netflix_in @TheWeirdass @EmmayEntertain @ApplauseSocial @Nikgonsalves @nikkhiladvani @nairsameer… t.co/LZ5iKKU8Ku
tweet ID >  1247376867046424578
Parent tweet id >  1246007863895449600
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x8 pc=0x669a8a]

goroutine 1 [running]:
main.parseURL(0x114ab58cf2d4e000, 0xc0000ef700, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ...)
        /home/nish/Documents/go/twitube/main.go:50 +0xda
main.main.func1(0xc00009e000)
        /home/nish/Documents/go/twitube/main.go:33 +0x243
github.com/dghubble/go-twitter/twitter.SwitchDemux.Handle(0x7119e8, 0xc00005af00, 0x7119f8, 0x711a00, 0x711a08, 0x711a10, 0x711a18, 0x711a20, 0x711a28, 0x7119c8, ...)
        /home/nish/Documents/go/src/github.com/dghubble/go-twitter/twitter/demux.go:55 +0x22e
main.main()
        /home/nish/Documents/go/twitube/main.go:41 +0x265
exit status 2

URL-адрес пакета go -twitter -> https://godoc.org/github.com/dghubble/go-twitter/twitter#ExtendedEntity

Буду признателен, если вы укажете мне правильное направление!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...