HTTP Google Reader API Kommunikation

Y

ydoom

Gast
Hallo zusammen,

ich bastel gerade an einem Programm, dass auf die RSS Feeds in meinem Google Reader zugreifen kann.
Ich möchte zum einen die Anzahl meiner ungelesenen Artikel bekommen - das funktioniert wunderbar.
Java:
public int getUnreadCount() {
		try {
			URL urlUnread = new URL("http://www.google.com/reader/api/0/unread-count?output=json");
			HttpURLConnection cUnread = (HttpURLConnection)urlUnread.openConnection();
	        cUnread.setRequestProperty("Authorization", "GoogleLogin auth=" + auth);
	        JSONTokener jtUnread = new JSONTokener(cUnread.getInputStream());
	        
			JSONArray jaUnread = ((JSONObject)jtUnread.nextValue()).getJSONArray("unreadcounts");
			if(jaUnread.length() != 0) {
				int index = -1;
				while(!jaUnread.getJSONObject(++index).getString("id").substring(0, 5).equals("user/"));
				return jaUnread.getJSONObject(index).getInt("count");
			}
			else {
				return 0;
			}
		}
		catch (Exception e) {
			System.out.println("authenticate");
			return -1;
		}
	}

Außerdem möchte ich einen bestimmten Artikel als gelesen markieren, dass funktioniert über ein POST Request. Ich bekomme jedoch immer folgende Exception
Java:
java.io.IOException: Server returned HTTP response code: 400 for URL: [url]http://www.google.com/reader/api/0/edit-tag[/url]
	at sun.net.[url]www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1436[/url])
	at APICommunicator.starItem(APICommunicator.java:137)
	at GUI.starCurrentItem(GUI.java:113)
	at GUI.actionPerformed(GUI.java:125)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2028)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2351)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
	at java.awt.Component.processMouseEvent(Component.java:6375)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
	at java.awt.Component.processEvent(Component.java:6140)
	at java.awt.Container.processEvent(Container.java:2083)
	at java.awt.Component.dispatchEventImpl(Component.java:4737)
	at java.awt.Container.dispatchEventImpl(Container.java:2141)
	at java.awt.Component.dispatchEvent(Component.java:4565)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4619)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4280)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4210)
	at java.awt.Container.dispatchEventImpl(Container.java:2127)
	at java.awt.Window.dispatchEventImpl(Window.java:2482)
	at java.awt.Component.dispatchEvent(Component.java:4565)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:684)
	at java.awt.EventQueue.access$000(EventQueue.java:85)
	at java.awt.EventQueue$1.run(EventQueue.java:643)
	at java.awt.EventQueue$1.run(EventQueue.java:641)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
	at java.awt.EventQueue$2.run(EventQueue.java:657)
	at java.awt.EventQueue$2.run(EventQueue.java:655)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:654)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:296)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:211)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:201)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:196)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:188)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

Der Quelltext der Methode:
Java:
public void starItem(String id) {
		try {			
			URL urlStarItem = new URL("http://www.google.com/reader/api/0/edit-tag");
			HttpURLConnection cStarItem = (HttpURLConnection)urlStarItem.openConnection();
			cStarItem.setDoOutput(true);
			cStarItem.setRequestMethod("POST");
			cStarItem.setRequestProperty("Authorization", "GoogleLogin auth=" + auth);
			//cStarItem.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
		    OutputStreamWriter outStarItem = new OutputStreamWriter(cStarItem.getOutputStream());
		    
		    //outStarItem.write(URLEncoder.encode("a=user/-/state/com.google/starred&s=user/-/state/com.google/reading-list&async=true&i=" + id + "&T=" + auth, "UTF-8"));
		    outStarItem.write("a=user/-/state/com.google/starred&async=true&s=user/-/state/com.google/reading-list&i=" + id + "&T=" + auth);
		    outStarItem.close();
		    
//Hier kommt die Exception:
		    BufferedReader inStarItem = new BufferedReader(new InputStreamReader(cStarItem.getInputStream()));
		    String decodedString;
		    while ((decodedString = inStarItem.readLine()) != null) {
		    	System.out.println(decodedString);
		    }
		    inStarItem.close();
		}
		catch (Exception e) {
			System.out.println("authenticate");
			e.printStackTrace();
		}
	}

Ich habe schon Google befragt und einige Sachen ausprobiert, aber es hat alles nichts geholfen. Es kann gut sein das mein Fehler sehr grundlegender Natur ist, ich mache HTTP Kommunikation zum ersten Mal.
Ich weiß jedoch das die Authentifizierung funktioniert hat und das die richtige Artikel ID übergeben wird.

lg,
ydoom
 

irgendjemand

Top Contributor
naja ... HTTP 400 heißt BAD REQUEST ... also wird wohl was mit dem nicht stimmen was du überträgst ...

auch sieht mir das mit dem "Writer" eher schräg aus ... würde hier einfach den OutputStream nehmen und darüber n PrintStream packen ...

auch wichtig : am ende fehlt der zeilenumbruch \n und die angabe der Content-Length

weitere infos -> Hypertext Transfer Protocol ? Wikipedia

zur not auch mal nach "apache commons" googlen
 
Y

ydoom

Gast
Danke für die Antwort, Ich habe versucht deine Punkte umzusetzen. Leider kommt immer noch der gleiche Fehler.
Java:
public void starItem(String id) {
		try {
			String output = URLEncoder.encode("a=user/-/state/com.google/starred&s=user/-/state/com.google/reading-list&async=true&i=" + id + "&T=" + auth + "\n", "UTF-8");
			URL urlStarItem = new URL("http://www.google.com/reader/api/0/edit-tag");
			HttpURLConnection cStarItem = (HttpURLConnection)urlStarItem.openConnection();
			cStarItem.setRequestMethod("POST");
			cStarItem.setRequestProperty("Authorization", "GoogleLogin auth=" + auth);
			cStarItem.setRequestProperty("Content-Type", "text/html; charset=UTF-8");
			cStarItem.setRequestProperty("Content-Length", "" + output.length());
			cStarItem.setDoOutput(true);
			
			//for (Entry<String, List<String>>  header : cStarItem.getHeaderFields().entrySet()) {
			//    System.out.println(header.getKey() + "=" + header.getValue());
			//}
			
			PrintStream ps = new PrintStream(cStarItem.getOutputStream());
			ps.print(output);
			ps.flush();
			ps.close();
			
		    //OutputStreamWriter outStarItem = new OutputStreamWriter(cStarItem.getOutputStream());
		    //outStarItem.write(output);
		    //outStarItem.close();
		    
		    BufferedReader inStarItem = new BufferedReader(new InputStreamReader(cStarItem.getInputStream()));
		    String decodedString;
		    while ((decodedString = inStarItem.readLine()) != null) {
		    	System.out.println(decodedString);
		    }
		    inStarItem.close();
		}
		catch (Exception e) {
			System.out.println("authenticate");
			e.printStackTrace();
		}
	}

Ist bei der Umsetzung deiner Verbesserungsvorschläge schon etwas schief gelaufen, oder liegt es an etwas anderem?

lg,
ydoom
 

irgendjemand

Top Contributor
also an sich hätte ich es auch so geschrieben *wobei ich vllt PrintStream.println() anstatt nur print() genommen hätte* ...
wird wohl an was anderem liegen ...

mein standard-tip : WireShark ... und ansehen was z.b. dein browser oder ein anderes programm bei dem es funktioniert sendet ... und was dein programm sendet und was sich da genau unterscheidet ...
manchmal liegt der fehler wirklich nur im detail von einem zeichen ..
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M com.google.gson wird nicht erkannt Netzwerkprogrammierung 2
J Google Drive Netzwerkprogrammierung 2
S HTTP Download von Google-URL mit Parametern Netzwerkprogrammierung 1
T GWT mit Google App Engine Netzwerkprogrammierung 0
M Google Image Upload Netzwerkprogrammierung 12
Dit_ UDP Port testen | Ping Google? Netzwerkprogrammierung 7
M Google Translate über Java ansprechen? Netzwerkprogrammierung 13
L Google Suchergebnisse in Java Applikation Netzwerkprogrammierung 4
S Google Search Webservice mit Apache Axis realisieren? Netzwerkprogrammierung 2
P URL - 403 ERROR - Google News - PHP geht Netzwerkprogrammierung 5
G Google-Suche funktioniert nicht Netzwerkprogrammierung 6
B google durchsuchen mit URL.openStream() Netzwerkprogrammierung 5
bummerland Google liefert HTTP response code 403 Netzwerkprogrammierung 2
A Socket-Anwendung (BufferedWriter/Reader liest nicht aktuellen Wert) Netzwerkprogrammierung 6
F Reader/ Writer werden nicht geschlossen Netzwerkprogrammierung 2
D Socket BufferedWriter/Reader Problem Netzwerkprogrammierung 1
B Socket Thread handling / Reader init Netzwerkprogrammierung 8
S Socket Reader und Binärdaten Netzwerkprogrammierung 2
Shoox Reader / Writer Problem Netzwerkprogrammierung 2
V Buffered Reader Bug! Netzwerkprogrammierung 7
D Frage: Buffered Reader --> Wie komm ich an die Daten (Byt Netzwerkprogrammierung 3
ExceptionOfExpectation Server/Client-Kommunikation Netzwerkprogrammierung 34
G Socket Socket Kommunikation Netzwerkprogrammierung 1
R Kommunikation zwischen Shell und Putty Netzwerkprogrammierung 5
temi (Netzwerk-) Kommunikation zwischen Anwendungen. Wie? Netzwerkprogrammierung 5
T Client zu Client Kommunikation Netzwerkprogrammierung 2
K Socket Nur bestimmte Zeichen als Kommunikation zulassen Netzwerkprogrammierung 1
I Client/Server Kommunikation bei einem Spiel Netzwerkprogrammierung 4
H Android - PC kommunikation Netzwerkprogrammierung 3
S Server Kommunikation Netzwerkprogrammierung 1
brainless Client Server Kommunikation verschlüsseln Netzwerkprogrammierung 13
T Socket Server/Client Kommunikation Netzwerkprogrammierung 8
I Socket Kommunikation C / Java Netzwerkprogrammierung 2
M Kommunikation übers Internet Netzwerkprogrammierung 9
P MIME-TYPE Erklaerung, Kommunikation zwischen Client und Server Netzwerkprogrammierung 3
J Sichere Kommunikation bei Server Client Netzwerkprogrammierung 3
Shams Anfängerfrage zu Server-Socket-Kommunikation Netzwerkprogrammierung 2
S Socket Kommunikation über Internet Netzwerkprogrammierung 1
M Socket Verschlüsselte Kommunikation - Fehler Netzwerkprogrammierung 1
I Interne Computer Kommunikation Netzwerkprogrammierung 6
M allgemeine Frage über Server-Client-Kommunikation Netzwerkprogrammierung 5
L Ratschlag zur Umsetzung einer client-server-Kommunikation Netzwerkprogrammierung 6
R Server zu Client Kommunikation Netzwerkprogrammierung 11
V Socket UDP Server/Client Kommunikation sehr langsam Netzwerkprogrammierung 2
C Socket Kommunikation mit SMTP-Server Netzwerkprogrammierung 4
J Kommunikation von Webanwendungen (auf Tomcat Server) untereinander Netzwerkprogrammierung 8
H Kommunikation Netzwerkprogrammierung 8
F Socket Server/Client Kommunikation Netzwerkprogrammierung 4
X Problem mit Server-Client-Kommunikation Netzwerkprogrammierung 14
E Zeitgleiche Kommunikation, mögliche Ansätze Netzwerkprogrammierung 17
1 Java to Android TCP Kommunikation Netzwerkprogrammierung 2
O php - applet Kommunikation Netzwerkprogrammierung 9
D HTTP Java HTTP Kommunikation Netzwerkprogrammierung 9
1 SSH-Kommunikation - Ende eines Streams nicht erkenntlich Netzwerkprogrammierung 2
R Kommunikation TCP + UDP Netzwerkprogrammierung 3
S RMI RMI-Applet kommunikation funktioniert nicht Netzwerkprogrammierung 8
1 Kommunikation mit externem Programm über TCP Netzwerkprogrammierung 2
D Server-Client (Web) Kommunikation Netzwerkprogrammierung 9
E Client-Server-Kommunikation Netzwerkprogrammierung 13
C HTTP Studienarbeit Kommunikation via HTTP mit POST zwischen Server und Client Netzwerkprogrammierung 7
DamienX Socket Asnchrone Kommunikation Netzwerkprogrammierung 5
Raidri Rückwertige RMI Kommunikation Netzwerkprogrammierung 6
S TCP/IP-Kommunikation ist zu langsam Netzwerkprogrammierung 13
M Kommunikation zwischen ServerSocket und Socket Netzwerkprogrammierung 2
G Datagram-Sockets für UDP-Kommunikation Netzwerkprogrammierung 2
G java asynchrone kommunikation Netzwerkprogrammierung 8
B Rmi Kommunikation Server zu mehreren Clients? Netzwerkprogrammierung 3
G Problem mit Client-Server Kommunikation Netzwerkprogrammierung 4
N Servlet-RMI Kommunikation Netzwerkprogrammierung 8
G Objecte für Kommunikation nutzen Netzwerkprogrammierung 2
L http kommunikation mit und ohne multipart Netzwerkprogrammierung 4
D Einfache Applet-Servlet-Kommunikation Netzwerkprogrammierung 5
G unvollständige Daten: Http Client-Server-Kommunikation Netzwerkprogrammierung 2
RaoulDuke RMI Kommunikation Java <-> Perl Netzwerkprogrammierung 7
M Servlet - Applet Kommunikation Netzwerkprogrammierung 3
S Kommunikation zweier Java-Programme Netzwerkprogrammierung 6
J client/server kommunikation Netzwerkprogrammierung 3
T Kommunikation auf Byte-Ebene zw. C und Java via Socket Netzwerkprogrammierung 12
M Client-Kommunikation ohne Server Netzwerkprogrammierung 7
S Kommunikation Fortran <-> Java auf Client-Server-Archi Netzwerkprogrammierung 2
J Kommunikation zw. Server und mehreren Clints haut nicht hin Netzwerkprogrammierung 2
K Socket Kommunikation Netzwerkprogrammierung 3
K Applet - Servlet Kommunikation ohne Sockets Netzwerkprogrammierung 5
R applet servlet kommunikation Netzwerkprogrammierung 2
G JINI über RMI // Client-Server Kommunikation Netzwerkprogrammierung 4
D Kommunikation zwischen mehreren Servlets??? Netzwerkprogrammierung 3

Ähnliche Java Themen

Neue Themen


Oben