Home  >  Article  >  Backend Development  >  How to tweet using Go using Twitter API v2?

How to tweet using Go using Twitter API v2?

WBOY
WBOYforward
2024-02-08 22:30:091070browse

如何使用 Twitter API v2 使用 Go 发布推文?

In today’s era of social media, Twitter has become an important platform for many people to communicate, share and obtain information. Using the Twitter API to tweet is an important skill for developers. In this article, PHP editor Youzi will introduce to you how to use Twitter API v2 and Go language to publish tweets. By mastering these techniques, you will be able to publish content on Twitter more flexibly and interact with more users. Let’s find out together!

Question content

As the title says, when I try to post a tweet using Go (I have a free X/Twitter developer account), I get the following error message:

<code>
2023/12/06 21:56:24 twitter: 453 You currently have access to a subset of Twitter API v2 endpoints and limited v1.1 endpoints (e.g. media post, oauth) only. If you need access to this endpoint, you may need a different access level. You can learn more here:
https://developer.twitter.com/en/portal/product
2023/12/06/21:56:24 &{Status:403 Forbidden StatusCode:403 ... [truncated for brevity]}
</code>

This is my current code:

package main

import (
    // other imports
    "fmt"
    "github.com/joho/godotenv"
    "log"
    "os"

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

type Credentials struct {
    ConsumerKey       string
    ConsumerSecret    string
    AccessToken       string
    AccessTokenSecret string
}

func getClient(creds *Credentials) (*twitter.Client, error) {
    config := oauth1.NewConfig(creds.ConsumerKey, creds.ConsumerSecret)
    token := oauth1.NewToken(creds.AccessToken, creds.AccessTokenSecret)

    httpClient := config.Client(oauth1.NoContext, token)
    client := twitter.NewClient(httpClient)

    verifyParams := &twitter.AccountVerifyParams{
        SkipStatus:   twitter.Bool(true),
        IncludeEmail: twitter.Bool(true),
    }

    user, _, err := client.Accounts.VerifyCredentials(verifyParams)
    if err != nil {
        return nil, err
    }

    log.Printf("User's ACCOUNT:\n%+v\n", user)
    return client, nil
}

func init() {
    if err := godotenv.Load(); err != nil {
        log.Fatal("Error loading .env file")
    }
}

func main() {
    creds := Credentials{
        AccessToken:       os.Getenv("ACCESS_TOKEN"),
        AccessTokenSecret: os.Getenv("ACCESS_TOKEN_SECRET"),
        ConsumerKey:       os.Getenv("CONSUMER_KEY"),
        ConsumerSecret:    os.Getenv("CONSUMER_SECRET"),
    }
    {
        // some code here...

        client, err := getClient(&creds)
        if err != nil {
            log.Println("Error getting Twitter Client, this is expected if you did not supply your Twitter API tokens")
            log.Println(err)
        }

        message := "Hello World"
        tweet, resp, err := client.Statuses.Update(message, nil)
        if err != nil {
            log.Println(err)
        }
        log.Printf("%+v\n", resp)
        log.Printf("%+v\n", tweet)
    }

}

I've visited a few online resources, but they seem to focus mostly on Python examples, and I'm looking for Go-specific help. Any insights or suggestions on how to resolve this issue would be greatly appreciated.

Workaround

The library you are using, go-twitter, uses v1.1 twitter API. The free plan doesn't have access to this API, which is what the error message you're getting is about.

For libraries using v2, please check the documentation: https://developer.twitter.com/ en/docs/twitter-api/tools-and-libraries/v2#go

The above is the detailed content of How to tweet using Go using Twitter API v2?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:stackoverflow.com. If there is any infringement, please contact admin@php.cn delete