Go言語でWeb APIを活用!X投稿の手順とポイント
はじめに
最近、Go言語の勉強を始めたばかりで、実際に使ってみる機会を探していました。その中で、「Go言語を使ってX(旧Twitter)に投稿する」というアイデアを思いつきました。このプロジェクトでは、Go言語を使った具体的なプログラミングの方法を学べただけでなく、実際のWeb APIを操作する体験もできました。
環境
- OS: Windows 11 Pro
- go 1.23.4
APIの設定について
X APIを設定するには、ちょっとした手間が必要ですが、いくつかのブログ記事がとても役に立ちました。例えば、「X API設定ガイド」という記事には、APIキーの取得方法や認証のやり方が初心者にも分かりやすく説明されています。
また、公式のX Developer PortalやChatGPTの説明だけでは分かりにくかった部分も、これらのブログを参考にすることで理解が深まりました。特に、登録時の注意点やエラーを回避するコツが具体的に書かれていて、実際に設定を進める際に非常に助かりました。
プログラム
プログラムはChatGPTに書いてもらいました。
一部パッケージが非推奨になっていたので、そこだけ修正しました。
Go 1.16以降では、io/ioutil
パッケージの機能が非推奨になり、代わりにio
をしようします。ただioutil
の部分を削除するだけの修正でした。
package main
import (
"bytes"
"fmt"
"io"
"net/http"
"net/url"
"github.com/dghubble/oauth1"
)
func main() {
// APIキーとアクセストークンを設定
apiKey := "APIキー"
apiSecretKey := "APIシークレットキー"
accessToken := "アクセストークン"
accessTokenSecret := "アクセストークンシークレット"
// OAuth1 認証設定
config := oauth1.NewConfig(apiKey, apiSecretKey)
token := oauth1.NewToken(accessToken, accessTokenSecret)
httpClient := config.Client(oauth1.NoContext, token)
// 投稿するメッセージ
message := "Go言語で投稿したテストメッセージ!(旧バージョン対応)"
// APIエンドポイントURL
endpoint := "https://api.twitter.com/1.1/statuses/update.json"
// URLパラメータにメッセージを追加
params := url.Values{}
params.Set("status", message)
// POSTリクエストを作成
req, err := http.NewRequest("POST", endpoint+"?"+params.Encode(), nil)
if err != nil {
fmt.Println("リクエスト作成エラー:", err)
return
}
// リクエストを送信
resp, err := httpClient.Do(req)
if err != nil {
fmt.Println("リクエスト送信エラー:", err)
return
}
defer resp.Body.Close()
// レスポンスを読み取る
body, err := io.ReadAll(resp.Body)
if err != nil {
fmt.Println("レスポンス読み取りエラー:", err)
return
}
// 結果を表示
fmt.Println("レスポンスステータス:", resp.Status)
fmt.Println("レスポンスボディ:", string(body))
}
実行手順
上記のコードをmain.goとして保存します。
Goモジュールを初期化します(まだ初期化していない場合)。
go mod init your_project_name
必要なライブラリをインストールします。
go mod tidy
コードを実行します。
go run main.go
実行結果
レスポンスステータス: 201 Created
レスポンスボディ: {"data":{"edit_history_tweet_ids":["1878731819010724033"],"text":"Go言語で投稿したテストメッセージ! #GoLang","id":"1878731819010724033"}}
投稿された記事
まとめ
ブログやChatGPTを参考にすることで、あまり苦労せずにAPIを利用してXへの投稿を行うことができました。今回の経験を活かし、次はRaspberry Pi上で動作するWebアプリケーションを作成してみたいと考えています。これからも新しい技術に挑戦し、スキルを磨いていきたいと思います。
Discussion