🐕

Go言語でWeb APIを活用!X投稿の手順とポイント

2025/01/13に公開

はじめに

最近、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の説明だけでは分かりにくかった部分も、これらのブログを参考にすることで理解が深まりました。特に、登録時の注意点やエラーを回避するコツが具体的に書かれていて、実際に設定を進める際に非常に助かりました。

https://qiita.com/neru-dev/items/857cc27fd69411496388

https://note.com/213414/n/n37a54c765ce4

プログラム

プログラムは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"}}

投稿された記事

https://x.com/TansanTsce/status/1878731819010724033

まとめ

ブログやChatGPTを参考にすることで、あまり苦労せずにAPIを利用してXへの投稿を行うことができました。今回の経験を活かし、次はRaspberry Pi上で動作するWebアプリケーションを作成してみたいと考えています。これからも新しい技術に挑戦し、スキルを磨いていきたいと思います。

Discussion