java swingとtwitter4jについて

207 views
Skip to first unread message

鈴木

unread,
Jan 29, 2013, 1:28:17 PM1/29/13
to twitt...@googlegroups.com

Netbeantsの公式サイトのチュートリアル
http://netbeans.org/kb/docs/websvc/twitter-swing_ja.html
をJFrameのデザインからプロジェクトの実行を行いコンパイル・実行した結果以下のようなエラー文がでました。

Type oauth_verifier string (taken from callback page url):********
Exception in thread "AWT-EventQueue-0" com.sun.jersey.api.client.UniformInterfaceException: GET http://twitter.com/statuses/user_timeline.xml?count=1 returned a response status of 404 Not Found
 at com.sun.jersey.api.client.WebResource.handle(WebResource.java:676)
 at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74)
 at com.sun.jersey.api.client.WebResource$Builder.get(WebResource.java:503)
 at twitterclient.TwitterJFrame$Twitter_OAuth_user_timeline__format_JerseyClient.getUserTimeline(TwitterJFrame.java:226)
 at twitterclient.TwitterJFrame.initUserInfo(TwitterJFrame.java:123)
 at twitterclient.TwitterJFrame.<init>(TwitterJFrame.java:32)
 at twitterclient.TwitterJFrame$2.run(TwitterJFrame.java:168)
 at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
 at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:701)
 at java.awt.EventQueue.access$000(EventQueue.java:102)
 at java.awt.EventQueue$3.run(EventQueue.java:662)
 at java.awt.EventQueue$3.run(EventQueue.java:660)
 at java.security.AccessController.doPrivileged(Native Method)
 at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
 at java.awt.EventQueue.dispatchEvent(EventQueue.java:671)
 at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:244)
 at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:163)
 at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)
 at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:147)
 at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:139)
 at java.awt.EventDispatchThread.run(EventDispatchThread.java:97)
ビルド停止(合計時間: 1分51秒)

エラー文を見る限り、どこかにアクセスできないように見えます。
このチュートリアルは少し昔に作られたものなので原因はtwitter4jのバージョンや
Consumer keyおよびConsumer secretの設定上の問題が原因なのでしょうか?
またエラー分の1行目の「http://twitter.com/statuses/user_timeline.xml?count=1
部分が更新して新しい仕様になったのでしょうか?そう考えると

参考に自分で調べてみたサイト
http://jptwitter.seesaa.net/article/145237765.html

念のためチュートリアルにあったサンプルソースコード(TwitterJFrame.java)も載せようと思いましたがあまりにも長いのでやめました。
http://netbeans.org/projects/samples/downloads/download/Samples%252FWeb%2520Services%252FTwitterSwingClient.zip
上記からDLできます。
DLしたサンプルコードに手を加えずそのままで実行しましたが似たようなエラーが出ました。
run:
Type oauth_verifier string (taken from callback page url):********
Exception in thread "AWT-EventQueue-0" com.sun.jersey.api.client.UniformInterfaceException: GET http://twitter.com/statuses/user_timeline.xml?count=1 returned a response status of 404 Not Found
 at com.sun.jersey.api.client.WebResource.handle(WebResource.java:676)
 at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74)
 at com.sun.jersey.api.client.WebResource$Builder.get(WebResource.java:503)
 at twitterclient.TwitterJFrame$TwitterClient.getUserTimeline(TwitterJFrame.java:253)
 at twitterclient.TwitterJFrame.initUserInfo(TwitterJFrame.java:178)
 at twitterclient.TwitterJFrame.<init>(TwitterJFrame.java:73)
 at twitterclient.TwitterJFrame$3.run(TwitterJFrame.java:198)
 at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
 at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:701)
 at java.awt.EventQueue.access$000(EventQueue.java:102)
 at java.awt.EventQueue$3.run(EventQueue.java:662)
 at java.awt.EventQueue$3.run(EventQueue.java:660)
 at java.security.AccessController.doPrivileged(Native Method)
 at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
 at java.awt.EventQueue.dispatchEvent(EventQueue.java:671)
 at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:244)
 at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:163)
 at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)
 at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:147)
 at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:139)
 at java.awt.EventDispatchThread.run(EventDispatchThread.java:97)
Timer Task is running
Exception when calling getFriendsTimeline = <?xml version="1.0" encoding="UTF-8"?>
<errors>
  <error code="34">Sorry, that page does not exist</error>
</errors>
ビルド停止

よろしくお願いします

Kazuki Hamasaki

unread,
Jan 30, 2013, 12:29:59 AM1/30/13
to twitt...@googlegroups.com
このチュートリアルですが,Twitter4jが使われておらず、まずはNetBeansのコミュニティへお問い合わせ頂くのが適当かと思います。

上記のプログラムですが、TwitterJFrame.java の232行目で OAUTH_BASE_URL =
"http://twitter.com/oauth" が指定されていますが、Twitter APIの仕様変更により
http://api.twitter.com/oauth に変更されています。
エラーとして 404 Not Found が返されているのはこのためだと思われます。 URLを変更すれば動作するかもしれません。

記事が古いようですので、なるべく新しいサンプルを参考になさると良いと思います。

2013年1月30日 3:28 鈴木 <fsjdh...@gmail.com>:
> --
> Twitter4J の最新情報をフォロー: http://twitter.com/t4j_news
> 現在のバージョン - 安定: 3.0.3, 開発中: 3.0.4-SNAPSHOT
> http://jira.twitter4j.org/issues/?filter=10030
> バグトラッキング: http://twitter4j.org/jira/browse/TFJ
>
> このメールは次の Google グループの参加者に送られています: Twitter4J J
> このグループにメールで投稿: twitt...@googlegroups.com
> このグループから退会する: http://groups.google.com/group/twitter4j-j?hl=ja
> ---
> このメールは Google グループのグループ「Twitter4J J」の登録者に送られています。
> このグループから退会し、メールの受信を停止するには、twitter4j-j...@googlegroups.com
> にメールを送信します。
> その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。
>
>



--
Kazuki Hamasaki
ne.viam...@gmail.com

鈴木

unread,
Feb 2, 2013, 8:49:54 PM2/2/13
to twitt...@googlegroups.com

 ashphyさんありがとうございます。


上記のプログラムですが、TwitterJFrame.java の232行目で OAUTH_BASE_URL =
"http://twitter.com/oauth" が指定されていますが、Twitter APIの仕様変更により
http://api.twitter.com/oauth に変更されています。
エラーとして 404 Not Found が返されているのはこのためだと思われます。 URLを変更すれば動作するかもしれません。

実際にやってみましたところ、同じエラー分が出ました。他にも原因があるみたいなので調べてみます。

やはり記事が古すぎでしたね。もしこれと似たような、または更新されている記事があれば紹介してください。
自分で探してみたところ見つかりませんでした。

Kazuki Hamasaki

unread,
Feb 2, 2013, 11:17:28 PM2/2/13
to twitt...@googlegroups.com
TwitterJFrame.java224行目のBASE_URIも同様の変更をされましたか?
使用されているライブラリが不明なためこれで動くかはわかりません.

>やはり記事が古すぎでしたね。もしこれと似たような、または更新されている記事があれば紹介してください。
似たサンプルというのはどういった点で似ているサンプルでしょうか?新しい記事だとほとんど英語になってしまいますが,以下のものがあります.

もし Swingとの連携サンプルが欲しいのでしたらこれを.新しいので,そのまま動くと思います.
https://github.com/javaprogger/twitter4j-swing-sample

もし,NetBeansでのアプリケーション開発ということでしたらこちらの記事を.ちょっと古いのでコードはそのままでは動かないかもしれませんが,ライブラリの導入部分は参考になります.
http://www.packtpub.com/article/swinging-tweeting-build-custom-application-twitter-java-netbeans

もし,Twitter4jを使わないサンプルということでしたら以下のライブラリが候補になります.
jTwitter - http://www.winterwell.com/software/jtwitter.php
java-Twitter - http://code.google.com/p/java-twitter/

2013年2月3日 10:49 鈴木 <fsjdh...@gmail.com>:

鈴木

unread,
Feb 3, 2013, 3:43:07 AM2/3/13
to twitt...@googlegroups.com
 
private static final String BASE_URI = "http://twitter.com"
private static final String BASE_URI = http://api.twitter.com/oauth;
 
にするという事でしょうか?動かしてみたしたが、同じエラー文がでました。
 
参考になるサイトのご紹介ありがとうございます。 

鈴木

unread,
Feb 3, 2013, 3:44:59 AM2/3/13
to twitt...@googlegroups.com
同じようなエラー文の書きましたが少し違っていたので報告します。
 
 
Exception in thread "AWT-EventQueue-0" com.sun.jersey.api.client.UniformInterfaceException: GET http://api.twitter.com/oauth/statuses/user_timeline.xml?count=1 returned a response status of 401 Unauthorized

 at com.sun.jersey.api.client.WebResource.handle(WebResource.java:676)
 at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74)
 at com.sun.jersey.api.client.WebResource$Builder.get(WebResource.java:503)
 at twitterclient.TwitterJFrame$TwitterClient.getUserTimeline(TwitterJFrame.java:247)

 at twitterclient.TwitterJFrame.initUserInfo(TwitterJFrame.java:178)
 at twitterclient.TwitterJFrame.<init>(TwitterJFrame.java:73)
 at twitterclient.TwitterJFrame$3.run(TwitterJFrame.java:198)
 at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
 at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:701)
 at java.awt.EventQueue.access$000(EventQueue.java:102)
 at java.awt.EventQueue$3.run(EventQueue.java:662)
 at java.awt.EventQueue$3.run(EventQueue.java:660)
 at java.security.AccessController.doPrivileged(Native Method)
 at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
 at java.awt.EventQueue.dispatchEvent(EventQueue.java:671)
 at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:244)
 at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:163)
 at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)
 at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:147)
 at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:139)
 at java.awt.EventDispatchThread.run(EventDispatchThread.java:97)
Timer Task is running
Exception when calling getFriendsTimeline = <?xml version="1.0" encoding="UTF-8"?>
<hash>
  <request>/oauth/statuses/friends_timeline.xml?count=10</request>
  <error>Could not authenticate with OAuth.</error>
</hash> 

Yusuke Yamamoto

unread,
Feb 3, 2013, 4:24:31 AM2/3/13
to twitt...@googlegroups.com, twitt...@googlegroups.com
Twitter4Jを使ってみてください!
-- 
山本 裕介
@yusuke
http://samuraism.jp/
Sent from my iPhone5
--

Kazuki Hamasaki

unread,
Feb 3, 2013, 4:03:46 AM2/3/13
to twitt...@googlegroups.com
http://twitter.comhttp://api.twitter.com に変更してください.

URLの変更に関しては以下の記事をご参照ください.
https://dev.twitter.com/blog/api-housekeeping

2013年2月3日 17:44 鈴木 <fsjdh...@gmail.com>:

鈴木

unread,
Feb 3, 2013, 4:46:10 AM2/3/13
to twitt...@googlegroups.com
サンプルコードの224行目を変更。→private static final String BASE_URI = "http://api.twitter.com";
232行目を変更→  private static final String OAUTH_BASE_URL = "http://api.twitter.com/oauth";
236行目、240行目に自分のCONSUMER_KEY、CONSUMER_SECRETを入れて実行した結果が以下の通りです。
 
 
 

Exception in thread "AWT-EventQueue-0" com.sun.jersey.api.client.UniformInterfaceException: GET http://api.twitter.com/statuses/user_timeline.xml?count=1 returned a response status of 404 Not Found


 at com.sun.jersey.api.client.WebResource.handle(WebResource.java:676)
 at com.sun.jersey.api.client.WebResource.access$200(WebResource.java:74)
 at com.sun.jersey.api.client.WebResource$Builder.get(WebResource.java:503)

 at twitterclient.TwitterJFrame$TwitterClient.getUserTimeline(TwitterJFrame.java:262)
 at twitterclient.TwitterJFrame.initUserInfo(TwitterJFrame.java:187)
 at twitterclient.TwitterJFrame.<init>(TwitterJFrame.java:82)
 at twitterclient.TwitterJFrame$3.run(TwitterJFrame.java:207)


 at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
 at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:701)
 at java.awt.EventQueue.access$000(EventQueue.java:102)
 at java.awt.EventQueue$3.run(EventQueue.java:662)
 at java.awt.EventQueue$3.run(EventQueue.java:660)
 at java.security.AccessController.doPrivileged(Native Method)
 at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
 at java.awt.EventQueue.dispatchEvent(EventQueue.java:671)
 at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:244)
 at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:163)
 at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)
 at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:147)
 at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:139)
 at java.awt.EventDispatchThread.run(EventDispatchThread.java:97)
Timer Task is running
Exception when calling getFriendsTimeline = <?xml version="1.0" encoding="UTF-8"?>
<errors>
  <error code="34">Sorry, that page does not exist</error>
</errors>

 Netbeansの日本語コミュニティの方にもお問い合わせしてみます。
(返信がなかなかありませんが。)
 
アドバイスありがとうございす。

Mocel

unread,
Feb 3, 2013, 8:39:26 AM2/3/13
to twitt...@googlegroups.com
こんにちは

Twitter API は http ではなく https を使うのが基本だったと思いますが…。

それ以前に、山本さんではありませんけど Twitter4J を使うように書き直すのがいちばん安全でいちばん楽なアプローチじゃないかと思います。
勉強のためとかでどうしても OAuth や REST API を利用するコードをすべて自前で書く必要がある、といった事情があるなら別ですけど。

ではでは。

-Mocel

Yusuke Yamamoto

unread,
Feb 3, 2013, 10:13:12 AM2/3/13
to twitt...@googlegroups.com, twitt...@googlegroups.com
去年の5月14日からえんどぽいんとにバージョンを付けることになりました。

あと今年の3月5日からxmlのエンドポイントはなくなります。

-- 
山本 裕介
@yusuke
http://samuraism.jp/
Sent from my iPhone5
--

鈴木

unread,
Feb 3, 2013, 11:09:13 AM2/3/13
to twitt...@googlegroups.com
ありがとうございます。今後のために目を通します。
Reply all
Reply to author
Forward
0 new messages