Получить данные из поиска библиотеки Twitter в структуру в Go - PullRequest
1 голос
/ 11 апреля 2019

Как добавить вывод из поиска в Твиттере в поле Данные в структуре SearchTwitterOutput {}.

Спасибо!

Я использую библиотеку твиттера для поиска в твиттере по запросу. Поиск возвращает массив строк (я верю), я могу fmt.println данных, но мне нужны данные в виде структуры.

type SearchTwitterOutput struct {
    Data  string
}

func (SearchTwitter) execute(input SearchTwitterInput) (*SearchTwitterOutput, error) {

    credentials := Credentials{
        AccessToken:       input.AccessToken,
        AccessTokenSecret: input.AccessTokenSecret,
        ConsumerKey:       input.ConsumerKey,
        ConsumerSecret:    input.ConsumerSecret,
    }

    client, err := GetUserClient(&credentials)
    if err != nil {
        return nil, err
    }

    // search through the tweet and returns a
    search, _ , err := client.Search.Tweets(&twitter.SearchTweetParams{
        Query: input.Text,
    })
    if err != nil {
        println("PANIC")
        panic(err.Error())
        return &SearchTwitterOutput{}, err
    }

    for k, v := range search.Statuses {
        fmt.Printf("Tweet %d - %s\n", k, v.Text)
    }

    return &SearchTwitterOutput{
        Data: "test", //data is a string for now it can be anything
    }, nil
}

 //Data field is a string type for now it can be anything
//I use "test" as a placeholder, bc IDK...

Result from fmt.Printf("Tweet %d - %s\n", k, v.Text):
Tweet 0 - You know I had to do it to them! @JennaJulien @Jenna_Marbles @juliensolomita @notjulen Got my first hydroflask ever…
Tweet 1 - RT @brenna_hinshaw: I was in J2 today and watched someone fill their hydroflask with vanilla soft serve... what starts here changes the wor…
Tweet 2 - I miss my hydroflask :(

Это моя вторая неделя работы с go и новичок в разработке. Любая помощь будет великолепна.

1 Ответ

0 голосов
/ 11 апреля 2019

Не похоже, что клиент просто возвращает вам кусочек строк. Используемый вами синтаксис диапазона (for k, v := range search.Statuses) возвращает два значения для каждой итерации: индекс в срезе (в данном случае k) и объект из среза (в данном случае v). Я не знаю тип search.Statuses - но я знаю, что у строк нет поля или метода .Text, который вы сейчас печатаете v.

На ваш вопрос:

Есть ли какая-либо конкретная причина возвращать только одну структуру с полем Data, а не напрямую возвращать выходные данные клиента twitter?

Ваша подпись функции может выглядеть следующим образом:

func (SearchTwitter) execute(input SearchTwitterInput) ([]<client response struct>, error)

И тогда вы можете оперировать текстом в тех объектах, где бы эта функция ни вызывалась.

Если вы намерены поместить данные в свою собственную структуру, вы можете вернуть их часть ([]*SearchTwitterOutput), и в этом случае вы можете создать один SearchTwitterOutput в цикле for, в котором вы находитесь. в настоящее время распечатывает твиты и добавляет их в список вывода. Это может выглядеть так:

    var output []*SearchTwitterOutput
    for k, v := range search.Statuses {
        fmt.Printf("Tweet %d - %s\n", k, v.Text)
        output = append(output, &SearchTwitterOutput{
            Data: v.Text,
            })
    }

    return output, nil

Но если ваша цель на самом деле состоит в том, чтобы вернуть все результаты, объединенные вместе и помещенные в одну структуру, я бы предложил создать фрагмент строк (содержащий нужный текст), а затем объединить их с разделителем по вашему выбору. , Затем вы можете поместить одну выходную строку в ваш возвращаемый объект, который может выглядеть примерно так:

    var outputStrings []string
    for k, v := range search.Statuses {
        fmt.Printf("Tweet %d - %s\n", k, v.Text)
        outputStrings = append(outputStrings, v.Text)
    }
    output = strings.Join(outputStrings, ",")

    return &SearchTwitterOutput{
        Data: output,
    }, nil

Хотя я хотел бы предостеречь, может быть сложно найти разделитель, который никогда не появится в твиттере.

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