昨年11月にTwitter API v2が正式に始まり、"「Essential」アクセスはサインアップするだけで「API v2」を利用できるようになっており、煩雑な申請手続きは不要"とのこと。
残念ながら今まで使っていたTwitter4Jはv2未対応。JavaでTwitter API v2が利用できる主要ライブラリは4つある。自動呟き処理を作りたい私の場合は実質twittered一択。
・twittered:後述の罠を抜ければちゃんと動作する。
・twitter4j-v2:名前は非常に良いんだが、Kotlin製。私にはKotlinのビルドの知識も環境も無くトラブルシュートは無理。
・twitter-compliance:GlassFishとPostgreSQLを使うJ2EE改めJavaEE改めJakartaEEの重量級の凄い奴だ。だが今回求めるTwitter4Jの後釜とは毛色が違う。
・JTW:殆どのメソッドが開発中。これはTwitterの公式ドキュメントからリンクして良い完成度ではないのでは…。

■twitteredの罠とは
GitHub にあるソースと Maven Repositoryにあるjarのバージョンがかなり異なっており、Twitter API v2に対応しているのはGitHubの最新版(2.x)の方のみ。
twittered 1.xでも2.xでも呟くには同じTwitterClientクラスの同じpostTweetメソッドを呼ぶが、1.xではTwitterAPI v1.1のURLをコールするので、Essentialでは403で拒絶される
このためv2 APIを使って呟きたい場合はGitHubから最新版のソースを得て自分でビルドしたものを使う必要がある。
■ビルドのコツ
元の作者はIntelliJ IDEAを使ってるっぽいけれど、意識低い私はEclipse。Mavenのプロジェクトとしてインポートすると、以下のエラーが。うーむ普段はMavenを全然使わないからな…。
FIlils8aMAUdrVN

Mavenプロジェクトのトラブルシュートは手に余るので、Eclipseで普通のJavaプロジェクトを作成し、ライブラリの依存関係はIvyで行う事にした。
自分の新プロジェクトのソースディレクトリに元のMavenプロジェクトのioディレクトリ配下を全部コピーして、Ivy.xmlに元のpom.xmlで指定されているライブラリを記述すると概ねビルドは通るが、一つハマリ所があり、ソース中のあちこちで使われている「LOGGER.error」や「LOGGER.info」が全部エラーになる。
それらはLombokが密かに作るクラスなのでソースをいくら探しても見つからない筈。
EclipseにLombokを設定しIvy.xmlにLombokを加えた上で、プロジェクト直下に元のプロジェクトの「lombok.config」ファイルをコピーしてリビルドするとOKだ。
かくしてJavaアプリケーションからv2 APIによる自動呟きは成功する。

ちなみにPython3ではtweepyで何の苦労もなく成功したのだった…。

Twitter API プログラミング
辻村 浩
ワークスコーポレーション
2010-04-21