Autore Topic: Problema Parsing JSON da response ricerca youtube  (Letto 1393 volte)

Offline Check87

  • Nuovo arrivato
  • *
  • Post: 5
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Wildfire
  • Sistema operativo:
    Windows 7
Problema Parsing JSON da response ricerca youtube
« il: 05 Luglio 2011, 00:25:09 CEST »
0
Salve ragazzi,
scusate ma vorrei cercare di capire come posso effettuare il parsing su una response di una ricerca youtube.
Posto qui un po' di codice con cui ho provato ad effettuare il parsing

Codice (Java): [Seleziona]
URL url;
                try {
                       
                        url = new URL("http://gdata.youtube.com/feeds/api/videos?vq=" + q + "&format=1&alt=json&&max-results=10");
                       
                        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                        connection.setDoOutput(true);
                    OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream(), "UTF-8");
                 
                   
                       
                    JSONObject json = new JSONObject(writer.getEncoding());
                     
                    JSONArray videos_url = json.getJSONArray("data");



l'errore me lo da chiaramente sul parametro che passo nel costruttore di JSONObject, ma non saprei come gestire lo stream.

Vi posto anche le prime righe dell' errore in LogCat

Codice: [Seleziona]
07-04 21:57:12.633: WARN/System.err(424): org.json.JSONException: Value UTF8 of type java.lang.String cannot be converted to JSONObject
07-04 21:57:12.633: WARN/System.err(424):     at org.json.JSON.typeMismatch(JSON.java:107)
07-04 21:57:12.643: WARN/System.err(424):     at org.json.JSONObject.<init>(JSONObject.java:158)
07-04 21:57:12.643: WARN/System.err(424):     at org.json.JSONObject.<init>(JSONObject.java:171)

Sapreste consigliarmi come fare?
Grazie  :-)

Offline denper

  • Utente normale
  • ***
  • Post: 290
  • Respect: +60
    • Mostra profilo
    • Anddenper
  • Dispositivo Android:
    Moto G
  • Play Store ID:
    denper
  • Sistema operativo:
    Window 7, Windows XP
Re:Problema Parsing JSON da response ricerca youtube
« Risposta #1 il: 05 Luglio 2011, 08:16:49 CEST »
0
Ciao,
hai provato a vedere cosa contiene connection.getOutputStream(). Sei sicuro che il formato di ritorno sia un JSON? Eventualemte prova ad allegare la risposta del server.

denper.
Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. [A.Einstein]

Proteggi la tua privacy! Utilizza GhostPhone! https://play.google.com/store/apps/details?id=com.denper.gp
Giochi a Winforlife e Superenalotto e sei stanco di controllare le tue schedine manualmente? Prova Checkwin: https://play.google.com/store/apps/details?id=com.denper.checkwintrial

Offline Check87

  • Nuovo arrivato
  • *
  • Post: 5
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Wildfire
  • Sistema operativo:
    Windows 7
Re:Problema Parsing JSON da response ricerca youtube
« Risposta #2 il: 05 Luglio 2011, 10:27:33 CEST »
0
Allora in realtà writer.getEncoding() non centra niente in quanto ritorna la codifica cioè UTF-8 quindi sicuramente non è quello il metodo da utilizzare.
A parte questo però non capisco come posso trasformare un OutputStreamWriter in una stringa in modo da poterla utilizzare come parametro del costruttore di JSONObject.

La risposta del server ad esempio con query "Roma" sarà una cosa di questo tipo :

http://gdata.youtube.com/feeds/api/videos?vq=Roma&format=1&alt=json&max-results=10



Offline denper

  • Utente normale
  • ***
  • Post: 290
  • Respect: +60
    • Mostra profilo
    • Anddenper
  • Dispositivo Android:
    Moto G
  • Play Store ID:
    denper
  • Sistema operativo:
    Window 7, Windows XP
Re:Problema Parsing JSON da response ricerca youtube
« Risposta #3 il: 05 Luglio 2011, 12:06:40 CEST »
0
Prova così con l'oggetto HttpClient che ti permette anche di utilizzare i timeout:

Codice (Java): [Seleziona]
ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("parametro1", <valore1>));
 nameValuePairs.add(new BasicNameValuePair("parametro2", <valore2>));
.......
.......
InputStream is = null;
                // http post
                try {
                        HttpParams httpParameters = new BasicHttpParams();
                        HttpConnectionParams.setConnectionTimeout(httpParameters, 5000);
                        HttpConnectionParams.setSoTimeout(httpParameters, 30000);

                        HttpClient httpclient = new DefaultHttpClient(httpParameters);
                        HttpPost httppost = new HttpPost("http://gdata.youtube.com/feeds/api/videos");
                        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                        HttpResponse response = httpclient.execute(httppost);
                        HttpEntity entity = response.getEntity();
                        is = entity.getContent();
                } catch (Exception e) {
                        Log.e("log_tag", "Error in http connection " + e.toString());
                }
                // convert response to string
                try {
                        BufferedReader reader = new BufferedReader(new InputStreamReader(is, "iso-8859-1"), 8);
                        StringBuilder sb = new StringBuilder();
                        String line = null;
                        while ((line = reader.readLine()) != null) {
                                sb.append(line + "\n");
                        }
                        is.close();

                        result = sb.toString();
                } catch (Exception e) {
                        Log.e("log_tag", "Error converting result " + e.toString());
                }
Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. [A.Einstein]

Proteggi la tua privacy! Utilizza GhostPhone! https://play.google.com/store/apps/details?id=com.denper.gp
Giochi a Winforlife e Superenalotto e sei stanco di controllare le tue schedine manualmente? Prova Checkwin: https://play.google.com/store/apps/details?id=com.denper.checkwintrial

Offline Check87

  • Nuovo arrivato
  • *
  • Post: 5
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Wildfire
  • Sistema operativo:
    Windows 7
Re:Problema Parsing JSON da response ricerca youtube
« Risposta #4 il: 20 Luglio 2011, 12:38:24 CEST »
0
Grazie Denper il POST è perfetto.
il problema che mi da ora è
result mi stampa questo

"Target feed is read-only"

che sinceramente non saprei a cosa è dovuto.

Qui ho trovato un articolo che parla dei feed YouTube ma non so se potrebbe servire

http://java.html.it/articoli/leggi/3317/youtube-api-per-java-gestire-video-e-dati-degli-utenti/

Ringrazio chiunque provi ad aiutarmi :-)

Offline denper

  • Utente normale
  • ***
  • Post: 290
  • Respect: +60
    • Mostra profilo
    • Anddenper
  • Dispositivo Android:
    Moto G
  • Play Store ID:
    denper
  • Sistema operativo:
    Window 7, Windows XP
Re:Problema Parsing JSON da response ricerca youtube
« Risposta #5 il: 20 Luglio 2011, 14:00:42 CEST »
0
Ciao,
non so se funziona, ma prova ad accedere utilizzando il metodo GET anzichè POST, probabilemte le API di Youtube non accettano il POST.
Tipo:
Codice (Java): [Seleziona]
try {
HttpClient client = new DefaultHttpClient();
                                HttpGet request = new HttpGet();
                                request.setURI(new URI("http://gdata.youtube.com/feeds/api/videos?parametro1=valore1&parametro2=valore2..."));
                                HttpResponse response = client.execute(request);
                                ..........
                        } catch (URISyntaxException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                        } catch (ClientProtocolException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                        } catch (IOException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                        }

« Ultima modifica: 20 Luglio 2011, 14:02:43 CEST da denper »
Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa. [A.Einstein]

Proteggi la tua privacy! Utilizza GhostPhone! https://play.google.com/store/apps/details?id=com.denper.gp
Giochi a Winforlife e Superenalotto e sei stanco di controllare le tue schedine manualmente? Prova Checkwin: https://play.google.com/store/apps/details?id=com.denper.checkwintrial

Offline Check87

  • Nuovo arrivato
  • *
  • Post: 5
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Wildfire
  • Sistema operativo:
    Windows 7
Re:Problema Parsing JSON da response ricerca youtube
« Risposta #6 il: 20 Luglio 2011, 16:01:28 CEST »
0
Risolto.Grande denper era proprio quello il problema.
Grazie 1000  :-)

Offline Nigna17

  • Nuovo arrivato
  • *
  • Post: 1
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    samsung y pro
  • Sistema operativo:
    Windows 7
Re:Problema Parsing JSON da response ricerca youtube
« Risposta #7 il: 02 Ottobre 2012, 11:56:44 CEST »
0
Ciao, potresti postare gentilmente il codice che ti permette di effettuare la ricerca su youtube... grazie mille!!!