Twitter4J 3.0.5 の can_dm 対応について(Twitter4JのContributorになった話)

githubのアカウントを2009年に作って以来、一度もpull requestを送ったことがなかったんですが、ようやくその機会が訪れました。

今回Twitter4Jにマージされたのは Add support for relationship.source.can_dm to Relationship by takke · Pull Request #115 · Twitter4J/Twitter4J · GitHub のパッチで、いわゆる can_dm の対応です。

背景:Twitterの仕様変更について

TwitterのDMに関する仕様が先日(10/15頃)変更され、これまでは「フォローしてくれてる人に送信可能」だったものが、それに加えて「フォロワーから受信可能に設定している人にも送信可能」になりました。

企業アカウントなどで無条件にDMを受け付けることができるようにする対応ですね*1

Twitter4J でDM送信可能かをチェックする方法

これまでTwitter4Jではsourceさんとtargetさんの友人関係を下記のように取得することで、DM送信可能かをチェックできました。

final Relationship relationship = twitter.showFriendship(sourceUserId, targetUserId);
if (relationship.isSourceFollowedByTarget()) {
    // フォローされてるからsourceさんはtargetさんにDM送信できる
}

これはもちろん Twitterfriendships/show API をラップしたものですが、今回の仕様変更(追加)で上記コードだけでは判定できなくなりました。

で、APIの仕様(というかExample)をよく見ると、レスポンスの relationship.source.can_dm にそれっぽい値があります。
今回作ったパッチ(およびマージされたTwitter4J 3.0.5)ではこれを取得するようにしたので、下記のように判定できるようになりました。

final Relationship relationship = twitter.showFriendship(sourceUserId, targetUserId);
if (relationship.canSourceDm()) {
    // sourceさんはtargetさんにDM送信できる
}

ちなみに拙作のAndroid向けTwitterクライアント TwitPane ではv2.7.0(10/17リリース)からcan_dmに対応してましたが、showFriendship 直後に getRawJSON で json を取り直して自力でパースしてましたw

というわけでContributorになったぞ!

https://github.com/yusuke/twitter4j/blob/3.0.5/readme.txt#L37

Twitter4Jにはお世話になりまくってるので今後も何かあれば貢献していきたいですねぇ。

*1:ここにきてTwitter社がDMを再活用・活性化しようとしているとも噂されているのでこの先の動きも気になるところですがそれはそれとして