2016-03-31 18 views
1

Ich habe mich angemeldet und bekomme den Authentifizierungs-Token, aber wenn ich auf den Like-Button klicke, funktioniert die YouTube-Bewertung nicht. Was muss ich noch tun, damit es funktioniert? Wenn ich die URL im Webbrowser verwende, frage ich nach authorize und führe es aus, dann funktioniert es. Aber von der App aus geschieht das noch nicht. Ich habe auch alle erforderlichen Client-ID, Client-Geheimnis usw. auch gesetzt.Youtube like (rating) funktioniert nicht

connectionForYoutubeData(); 

f.setLayout(new BoxLayout(BoxLayout.Y_AXIS)); 
Button signIn = new Button("signIn"); 
Button like = new Button("Like"); 
like.setText("Like: " + likeCount); 

Container mainContainer = new Container(new BoxLayout(BoxLayout.Y_AXIS)); 
mainContainer.add(signIn); 
mainContainer.add(like); 
f.add(mainContainer); 

signIn.addActionListener((e) -> { 
    String clientId = "704790222159-n1cpb3g1q3plirslu5739apc0gnnv4pp.apps.googleusercontent.com"; 
    String redirectURI = "https://www.youtube.com/"; 
    String clientSecret = "q_cxGCCbX5GVC99kxgstjksB"; 
    Login gc = GoogleConnect.getInstance(); 
    gc.setClientId(clientId); 
    gc.setRedirectURI(redirectURI); 
    gc.setClientSecret(clientSecret); 
    gc.setCallback(new LoginCallback() { 
     @Override 
     public void loginFailed(String errorMessage) { 
      like.addActionListener((c) -> { 
       Label newLabel = new Label("beck unsuccess"); 
       f.add(newLabel); 
      }); 
     } 
     @Override 
     public void loginSuccessful() { 
      Dialog.show("Logged In", "you are currently logged in ", "OK", null); 
     } 
    }); 
    if (!gc.isUserLoggedIn()) { 
     gc.doLogin(); 
    } else { 
     token = gc.getAccessToken().getToken(); 
    } 
}); 

like.addActionListener((e) -> { 
    ConnectionRequest cr = new ConnectionRequest() { 
     @Override 
     protected void readResponse(InputStream input) throws IOException { 
      super.readResponse(input); 
     } 
     @Override 
     protected void postResponse() { 
      super.postResponse(); 
     } 
    }; 
    cr.setPost(true); 
    cr.setUrl("https://developers.google.com/apis-explorer/#p/youtube/v3/youtube.videos.rate?" + "id=" + "Z98hXV9GmzY" + "&rating=like" + "&access_token=" + token + "&key=AIzaSyCAETrMkZeJ_nTq4ZdP1Jq6BFtA_11TR6I"); 
    cr.setDuplicateSupported(true); 
    NetworkManager.getInstance().addToQueueAndWait(cr); 
}); 
f.revalidate(); 

Sign-in-Antwort-Header:

Transfer-Encoding=[chunked] 
null=[HTTP/1.1 200 OK] 
Alt-Svc=[quic=":443"; ma=2592000; v="32,31,30,29,28,27,26,25"] 
Server=[GSE] 
X-Content-Type-Options=[nosniff] 
Pragma=[no-cache] 
Date=[Fri, 01 Apr 2016 04:17:24 GMT] 
Alternate-Protocol=[443:quic] 
Accept-Ranges=[none] 
X-Frame-Options=[SAMEORIGIN] 
Cache-Control=[no-cache, no-store, max-age=0, must-revalidate] 
Vary=[Origin,Accept-Encoding, X-Origin] 
Expires=[Fri, 01 Jan 1990 00:00:00 GMT] 
X-XSS-Protection=[1; mode=block] 
Content-Type=[application/json; charset=UTF-8] 

wie Response-Header:

X-Frame-Options=[DENY] 
null=[HTTP/1.1 200 OK] 
Server=[Google Frontend] 
Content-Length=[994] 
Date=[Fri, 01 Apr 2016 04:18:11 GMT] 
Content-Type=[text/html; charset=utf-8] 

Update:

@Override 
protected void readResponse(InputStream input) throws IOException { 
JSONParser jSONParser = new JSONParser(); 
results = jSONParser.parseJSON(new InputStreamReader(input)); 
System.out.println("parsed results: " + results); 
    } 

wenn ich versuche, die Antwort, wie oben, es zu lesen gibt folgenden Fehler im Ausgang

Expected true for key value! 
Expected true for key value! 
java.lang.ArrayIndexOutOfBoundsException 
Expected true for key value! 
Expected true for key value! 
Expected true for key value! 
Expected null for key value! 
Expected null for key value! 
Expected null for key value! 
Expected true for key value! 
Expected true for key value! 
Expected true for key value! 
Expected true for key value! 
parsed results: {} 

Update 2:
Ich kam zu wissen, dass ich die falsche API für die Bewertung bin mit. Die richtige ist

cr.setUrl("https://www.googleapis.com/youtube/v3/videos/rate?id=" + "kF94Jwx9ugU" + "&rating=like&access_token=" + token + "&key=xxxxxx"); 

aber es gibt 403 Forbidden Fehler. P. Ich habe mich bereits angemeldet und habe auch den Token-Wert erhalten. Es sollte also kein Auth-Fehler sein, denke ich. Die Antwortlänge ist ebenfalls null und der Antworttext ist ebenfalls der Antworttext. Daher ist der Betrugserkennungsteil von Google hier nicht gültig.

+0

Erhalten Sie keine Ausnahme? – Berger

+0

no ... nothing .... ich werde angemeldet, access token auch, aber die Nr. von Likes bleiben gleich – beck

+0

Hallo @Berger es gibt 403 Verboten Ausnahme jetzt. – beck

Antwort

0

Ich bemerke, dass Sie nicht die Antwort auf den gleichen Anruf überprüfen, der JSON oder Daten enthalten könnte, die angeben, warum dies nicht akzeptiert wird. Ich empfehle, den Netzwerkmonitor zu verwenden, um diese Antwort anzuzeigen.

Beachten Sie, dass das Aufrufen solcher APIs eine Herausforderung darstellen kann, da Google möglicherweise eine Betrugserkennung eingerichtet hat und Sie möglicherweise bereits als eine Person gekennzeichnet hat, die das gleiche System umgehen möchte.

+0

ich aktualisierte Antwort vom Netzwerkmonitor oben, bitte schauen Sie. – beck

+0

Ist im Antworttext nichts enthalten? Es sagt, dass es 994 Bytes gibt, also gibt es eine Antwort –

+0

, wenn ich versuche, die Antwort zu lesen, gibt es Fehlerausgabe wie oben aktualisiert. – beck

Verwandte Themen