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頃)変更され、これまでは「フォローしてくれてる人に送信可能」だったものが、それに加えて「フォロワーから受信可能に設定している人にも送信可能」になりました。
- Twitter、フォロワーからのDM受信が可能に - ITmedia NEWS
- Best iPad apps: The ultimate guide
- Jim Connolly on Twitter: "You can now receive DM's from anyone who follows you, without you following them. Just saw this in settings... http://t.co/Lsf0FR563q"
企業アカウントなどで無条件にDMを受け付けることができるようにする対応ですね*1。
Twitter4J でDM送信可能かをチェックする方法
これまでTwitter4Jではsourceさんとtargetさんの友人関係を下記のように取得することで、DM送信可能かをチェックできました。
final Relationship relationship = twitter.showFriendship(sourceUserId, targetUserId); if (relationship.isSourceFollowedByTarget()) { // フォローされてるからsourceさんはtargetさんにDM送信できる }
これはもちろん Twitter の friendships/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にはお世話になりまくってるので今後も何かあれば貢献していきたいですねぇ。