View Full Version : [Java me] aiuto integrazione banner
DeAndreon
18-04-2011, 13:19
Ciao a tutti! Ho bisogno di un grande aiuto...
In pratica, nella mia applicazione ho bisogno di visualizzare un banner pobblicitario. Il network di advertising che vorrei usare mi dice questo per integrare il banner:
1. In order to utilize our Server-to-Server API your application must support the ability to handle HTML content inside your application.
2. Once you have the object in your application that can receive HTML content, you must pass via an HTTP GET call the required variables to make an ad call with the appropriate key/value pairs.
Unique Identifier of that user (AUID)
Public IP Address of the Device (UIP)
User Agent String of the Device’s Browser (UA)
Placement ID (APID)
3. Formulate the ad call via the example below.
oswodddhttp://ads.mp.mydas.mobi/getAd?apid=357&auid=testingauid&uip=66.209.31.31&ua=testing&mode=test
A quanto ho capito devo formulare una richiesta di tipo GET al loro server...
Come posso realizzarla in java me? Come mi devo muovere?
Mi potreste dare gentilmente un codice d'esempio sull'esempio postato?
Grazie a tutti in anticipo!
E' un po' che non pasticcio più come la versione me (diciamo una decina d'anni va :D) ma puoi usare un URL per fare un get, devi solo codificare la stringa della richiesta (così come la vedi, ad esempio, nella barra degli indirizzi di un browser). Quando apri il flusso di lettura dell'url l'api automaticamente invia la richiesta, attende la risposta e ti fornisce i byte della risposta attraverso l'input.
DeAndreon
18-04-2011, 14:02
Ciao! Grazie per la risposta. Ma in pratica per far funzionare il banner devo solo implementare questa richiesta tramite get? Perchè non ho capito bene cosa vuole la richiesta che mi è stata fatta per visualizzare il banner...
In pratica dovrei fare un codice del genere che c'è qui?:
http://j2me-codes.blogspot.com/2007/07/j2me-interacting-with-server-php-http.html
Gentilmente, se ti va soprattutto, potresti farmi un esempio di codice?
Non sono molto pratico con l'http... Ho solo una buona conoscenza di java(grazie all'esame di programmazione ad oggetti).
Guarda questo:
http://www.java2s.com/Tutorial/Java/0430__J2ME/HttpGetwithJ2ME.htm
sembra fare al caso mio... Questo codice può soddisfare la richiesta che mi è stata fatta per mettere il banner nel mio programma?
Grazie mille!
L'http get dell'esempio va benissimo. Poi devi fare il parsing del codice html che ti arriva come risposta (a meno che non abbiano aggiunto in widget per la visualizzazione di contenuti html alle api di Jme).
Se il banner è semplicemente un'immagine passiva, devi solo pescare l'url dell'immagine, caricarla e mostrarla. Se è un'immagine con link devi scrivere anche la logica di gestione del link. Se è componente html più complicato è già più dura.
DeAndreon
18-04-2011, 17:25
L'http get dell'esempio va benissimo. Poi devi fare il parsing del codice html che ti arriva come risposta (a meno che non abbiano aggiunto in widget per la visualizzazione di contenuti html alle api di Jme).
Se il banner è semplicemente un'immagine passiva, devi solo pescare l'url dell'immagine, caricarla e mostrarla. Se è un'immagine con link devi scrivere anche la logica di gestione del link. Se è componente html più complicato è già più dura.
Ciao! Grazie mille :)
Oddio, la cosa si fa ancora più complicata :S Cos'è il parsing? :S
Ho fatto il mio codice riutilizzando quello:
urlstring = "http://ads.mp.mydas.mobi/getAd?apid=41608&auid=testingauid&uip=66.209.31.31&ua=testing&mode=test";
new Thread() {
public void run() { // sending a GET request to web server
String resultstring = sendGetRequest(urlstring);
}
}.start();
// send a GET request to web server
public String sendGetRequest(String urlstring)
{ HttpConnection hc = null;
InputStream dis = null;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try
{ /* openning up http connection with the web server
* when the connection is opened, the default request
* method is GET */
hc = (HttpConnection)
Connector.open(urlstring);
// establishing input stream from the connection
dis = hc.openInputStream();
byte[] buf = new byte[512];
// reading the response from web server character by character
int red;
while ((red = dis.read(buf)) != -1 ) {
baos.write(buf, 0, red); }
} catch (IOException ioe)
{ return "ERROR"; }
finally {
try { if(hc != null)
hc.close(); } catch (IOException ignored) {
}
try { if(dis != null) dis.close();}
catch (IOException ignored) {}
}
return baos.toString() /*String(baos.getBytes())*/;
}
Ora cosa devo fare per visualizzare l'immagine?
:)
Grazie ancora :)
La stringa restituita dal metodo sendGetRequest è (il corpo di ) un messaggio in formato HTTP.
C'è uno standard che definisce cosa significhi "messaggio HTTP" ma, nel nostro caso, dovrebbe trattarsi di un messaggio HTTP il cui corpo contiene del codice HTML.
Nella fattispecie, il codice risulta (da una prova):
<a href="http://bank06.mi.ads.mp.mydas.mobi/getAd.php5?apid=357&ua=testing&uip=66.209.31.31&auid=testingauid&testua=Java%2F1.6.0_24&testuip=127.0.0.1&testuid=testingauid&mode=results">
<img src="http://bank06.mi.ads.mp.mydas.mobi/getAd.php5?apid=357&ua=testing&uip=66.209.31.31&auid=testingauid&testua=Java%2F1.6.0_24&testuip=127.0.0.1&testuid=testingauid&mode=validate" border="0"/>
</a>
Cioè è un'immagine vincolata ad un collegamento.
I dati dell'immagine li ottieni collegandoti all'url definito come valore dell'attributo src (in rosso).
Il codice html restituito dice anche che quando l'utente clicca su quell'immagine il browser deve caricare la pagina indicata dal valore dell'attributo href di a (in verde).
Se la struttura è sempre quella (e trattandosi di un banner potrebbe anche esserlo) allora puoi fare il parsing (cioè analisi e divisione in blocchi funzionali di un certo flusso di dati) applicando questa logica:
l'indirizzo dei dati da caricare quando l'utente "attiva" l'immagine del banner è (tutto quello che è contenuto tra href=" e il successivo "), l'indirizzo del flusso dati dell'immagine da caricare è (tutto quello che è contenuto tra src=" e il successivo ").
DeAndreon
18-04-2011, 21:21
La stringa restituita dal metodo sendGetRequest è (il corpo di ) un messaggio in formato HTTP.
C'è uno standard che definisce cosa significhi "messaggio HTTP" ma, nel nostro caso, dovrebbe trattarsi di un messaggio HTTP il cui corpo contiene del codice HTML.
Nella fattispecie, il codice risulta (da una prova):
<a href="http://bank06.mi.ads.mp.mydas.mobi/getAd.php5?apid=357&ua=testing&uip=66.209.31.31&auid=testingauid&testua=Java%2F1.6.0_24&testuip=127.0.0.1&testuid=testingauid&mode=results">
<img src="http://bank06.mi.ads.mp.mydas.mobi/getAd.php5?apid=357&ua=testing&uip=66.209.31.31&auid=testingauid&testua=Java%2F1.6.0_24&testuip=127.0.0.1&testuid=testingauid&mode=validate" border="0"/>
</a>
Cioè è un'immagine vincolata ad un collegamento.
I dati dell'immagine li ottieni collegandoti all'url definito come valore dell'attributo src (in rosso).
Il codice html restituito dice anche che quando l'utente clicca su quell'immagine il browser deve caricare la pagina indicata dal valore dell'attributo href di a (in verde).
Se la struttura è sempre quella (e trattandosi di un banner potrebbe anche esserlo) allora puoi fare il parsing (cioè analisi e divisione in blocchi funzionali di un certo flusso di dati) applicando questa logica:
l'indirizzo dei dati da caricare quando l'utente "attiva" l'immagine del banner è (tutto quello che è contenuto tra href=" e il successivo "), l'indirizzo del flusso dati dell'immagine da caricare è (tutto quello che è contenuto tra src=" e il successivo ").
Ciao! Grazie mille per l'aiuto che mi stai dando. confermo, il codice d'esempio trovato funziona, mi ritorna il tuo stesso valore.
Ora devo fare il parsing.
In pratica devo estrapolare l'indirizzo dell'immagine e visualizzare il banner in un item e quando viene cliccato usare il link per il click, giusto?
Per estrapolare ho pensato alle funzioni di String come substring però il trucco dovrebbe funzionare se non cambiasse mai la lunghezza della stringa...
Esiste sicuramente un'espressione regolare per farlo ma te la cavi anche con "indexOf".
Il primo pezzo inizia con href=" e finisce con "
Detta s la stringa restituita dal metodo in esame, l'indirizzo del link è:
String startToken = "href=\"";
String endToken = "\"";
int start = s.indexOf(startToken) + startToken.length();
int end = s.indexOf(endToken, start);
String hrefUrl = s.substring(start, end);
L'indirizzo dell'immagine è:
String s0 = "src=\"";
String s1 = "\"";
int start = s.indexOf(s0) + s0.length();
int end = s.indexOf(s1, start);
String srcUrl = s.substring(s0, s1);
A naso. Magari controlla se ci va un +1 o -1 da qualche parte.
DeAndreon
18-04-2011, 21:54
Si, ho fatto una cosa simile alla tua, sono riuscito ad ottenere l'indirizzo dell'immagine solo che ora non ne vuole sapere di mettersi sullo schermo del simulatore...
In pratica ho fatto così:
int first = resultstring.indexOf("src=");
int last = resultstring.indexOf("validate");
String sub = resultstring.substring(first+5, last+8);
HttpConnection hpc = null;
DataInputStream dis = null;
try {
hpc = (HttpConnection) Connector.open(sub);
int length = (int) hpc.getLength();
byte[] data = new byte[length];
dis = new DataInputStream(hpc.openInputStream());
dis.readFully(data);
image = Image.createImage(data, 0, data.length);
}catch(Exception e){}
finally {
if (hpc != null)
try {
hpc.close();
} catch (IOException ex) {
ex.printStackTrace();
}
if (dis != null)
try {
dis.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
}.start();
i= new ImageItem(null, image, 0, null);
f.append(i);
In pratica prendo l'indirizzo dell'immagine e lo metto in sub. Poi lo uso con la parte di codice successiva per ottenere l'immagine solo che a quanto pare non funziona e non capisco il perchè...
Grazie mille per il tempo che mi stai dedicando... Piano piano stiamo risolvendo il problema :)
Ad occhio mi sembra ok. Forse l'immagine è in un formato non supportato? Prova a salvarla su un file (usando Java SE).
DeAndreon
19-04-2011, 08:16
Ciao! Buongiorno!
Secondo me il problema è un altro...
Ho aperto il codice che mi viene restituito con il get nel mio browser e si apre la pagina mentre se prendo singolarmente gli url restituiti cioè img o src non si apre niente...
Cosa vuol dire? Che devo visualizzare il codice ottenuto come una pagina web?
Sinceramente mi sta mandando in tilt questa situazione :S
E' possibile che lo script php a cui puntano i link non restituisca un'immagine nel caso in cui il browser non appartenga ad uno dei noti.
Da un prova a me risulta che l'url dell'immagine restituisce non un'immagine ma una scritta, quando eseguito al di fuori del browser. Se così fosse, allora ti basterebbe presentare a video quella scritta (come se si trattasse di un browser non in grado di visualizzare immagini).
Dovresti provare a contattare l'autore del banner per sapere se questo comportamento rientri nella "visualizzazione di pagine html" indicata nei requisiti.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.