logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Tibbo em1206 - sczytanie kanału RSS, polecenie query nie działa

betromatic 01 Wrz 2011 15:42 1644 5
REKLAMA
  • #1 9884975
    betromatic
    Poziom 2  
    Potrzebuje sczytać za omocą Tibbo em1206 zawartość kanału rss.

    Próbuje
    
    sub on_sock_event(newstate as pl_sock_state, newstatesimple as pl_sock_state_simple)
    	
    	if sock.num = 0 and sock.statesimple = PL_SSTS_EST then		
    		Query("rss.weather.com")	'http://rss.weather.com
    	end if	
    	if sock.num = 1 and sock.statesimple = PL_SSTS_EST then
    		sock.setdata("GET /weather/rss/local/PLXX0040?cm_ven=LWO&cm_cat=rss&par=LWO_rss")
    		sock.setdata(chr(13)+ chr(10))
    		sock.send
    	end if
    end sub
    

    jednak polecenie query nie daje rezultatu

    Pozdrawiam

    Proszę używać znaczników code.
    Robak
  • REKLAMA
  • #2 9885141
    KeinXor
    Poziom 24  
    Witam ,
    chętnie pomogę rozwiązać problem ale nie bardzo wiem co robi procedura „Query”.
    Zamieściłem już przykład jak nawiązać połączenie z serwerem http i przekazać parametry Link
  • REKLAMA
  • #3 9888328
    betromatic
    Poziom 2  
    query jest procedurą umieszczoną w bibliotece DNS, którą pobrałem ze strony tibbo
    
    'form the DNS query string and send the query to DNS server
    public function Query(sQueryName as string) as string
    	dim sDNSQuery as string
    	dim sQFlag as string
    	dim i as byte
    	dim sTemp as string
    		sDNSQuery = BinaryConverter(bin(wID),sDNSQuery)
    		sQFlag = "0"+ sOPCode + "00" + sRD + "00000000"	
    		sDNSQuery = sDNSQuery + chr(val("&b"+ left(sQFlag,8))) + chr(val("&b"+ right(sQFlag,8)))
    		sDNSQuery = BinaryConverter(bin(wQDCount),sDNSQuery)
    		sDNSQuery = sDNSQuery + chr(0) + chr(0) + chr(0) + chr(0) + chr(0) + chr (0)
    		sQueryName = sQueryName + "."
    		do while instr(1,sQueryName,".",1) > 0 
    			dim bPos as byte
    			bPos = instr(1,sQueryName,".",1)
    			sTemp = sTemp + chr(bPos-1) + left(sQueryName, bPos-1)
    			sQueryName = right(sQueryName, len(sQueryName)-bPos)
    		loop
    		sQuestion = sTemp
    		sDNSQuery = sDNSQuery + sQuestion + chr(0)
    		sDNSQuery = BinaryConverter(bin(wQType),sDNSQuery)
    		sDNSQuery = BinaryConverter(bin(wQClass),sDNSQuery)
    		sock.num = 0
    		sock.setdata(sDNSQuery)
    		sock.send
    		Query = sDNSQuery
    end function 
    

    Tego problemu nie udało mi się rozwwiązać dla adresu rss.weather.com jednak kiedy odpytuje przy użyciu google weather wszytsko działa
    
    if sock.num = 0 and sock.statesimple = PL_SSTS_EST then		
    		Query("www.google.com")	
    	end if	
    	if sock.num = 1 and sock.statesimple = PL_SSTS_EST then
    		sock.setdata("GET /ig/api?hl=pl&weather=Poznan")
    		sock.setdata(chr(13)+ chr(10))
    		sock.setdata(chr(13)+ chr(10))'dla rss
    		sock.send
    	end if
    

    Teraz pojawił się inny problem. Po pobraniu danych pogodowych umieszczam je w stringu o w którym dane pogodowe są oddzielone za pomocą "/" i staram się je wyświetlić na stronie. Kiedy string składa się z trzech danych temperatura/warunki/wilgotność wszytsko działa, jednak kiedy dodaje kolejne dane nie wyświetla się nic.

    Konfiguracja gniazda:
    
    	sock.num = 2										'do prezentacji danych na stronie
    
    	sock.rxbuffrq(1)					
    	sock.txbuffrq(1)
    	sock.varbuffrq(1)
    	sock.protocol=PL_SOCK_PROTOCOL_TCP
    	sock.httpmode=YES
    	sock.inconmode=PL_SOCK_INCONMODE_ANY_IP_ANY_PORT
    	sock.httpportlist="80"
    </code>
    Kod html:
    <code>
    <script type="text/javascript">
    	var temp = "";
    	var rain = "";
    	var humi = "";
    	/*
    	var ltempa = "":
    	var htempa = "";
    	var cona = "";
    	var ltempb = "":
    	var htempb = "";
    	var conb = "";
    	var ltempc = "":
    	var htempc = "";
    	var conc = "";
    	*/
    	var help = "";
    	var helssplit = "";
    	var t
    	function load()
    	{
    		help = "<?sock.num=2 sock.setdata(alldata) sock.send?>";
    		helpsplit = help.split("/");
    		document.getElementById('itemp').value = temp;
    		temp   = helpsplit[0];
    		document.getElementById('irain').value = rain;
    		rain   = helpsplit[1];
    		document.getElementById('ihumi').value = humi;
    		humi   = helpsplit[2];
    		/*
    		document.getElementById('iltempa').value = ltempa;
    		ltempa = helpsplit[3];
    		document.getElementById('ihtempa').value = htempa;
    		htempa = helpsplit[4];
    		document.getElementById('icona').value = cona;
    		cona   = helpsplit[5];
    		*/
    		t=setTimeout("load()",1000);
    	}
    </script>
    <BODY onload="load()">
    	<div class="border1">
    	<form>
    		<table border="2" cellspacing="0" cellpadding="9" >
    		Pogoda dla Poznania
    			<tr>
    				<td>Temperatura:</td>
    				<td>
    					<input type="text" id="itemp">&degC
    				</td>
    			</tr>
    			<tr>
    				<td>Warunki atmosferyczne:</td>
    				<td>
    					<input type="text" id="irain">
    				</td>
    			</tr>
    			<tr>
    				<td>Wilgotność:</td>
    				<td>
    					<input type="text" id="ihumi">%
    				</td>
    			</tr>
    			<!--
    			<tr>
    				<td>Jutro:</td>
    				<td>Minimalna temperatura:</td>
    				<td>
    					<input type="text" id="iltempa">
    				</td>
    				<td>Maksymalna temperatura:</td>
    				<td>
    					<input type="text" id="iltempa">
    				</td>
    				<td>Warunki:</td>
    				<td>
    					<input type="text" id="icona">
    				</td>
    			</tr>
    			-->
    		</table>
    	</form>
    
  • REKLAMA
  • #4 9888760
    KeinXor
    Poziom 24  
    Wydaje mi się że dane które przychodzą do Twojego modułu są nieco większe niż miejsce jakie na nie przeznaczyłeś... a dokładnie sock.rxbuffrq(1) deklarujesz jedną stronę pamięci czyli 256 bajtów.
  • REKLAMA
  • #5 9889427
    betromatic
    Poziom 2  
    zwiększyłem bufor
    	
            sock.rxbuffrq(4)					
    	sock.txbuffrq(4)
    	sock.varbuffrq(4)
    	sock.protocol=PL_SOCK_PROTOCOL_TCP
    	sock.httpmode=YES
    	sock.inconmode=PL_SOCK_INCONMODE_ANY_IP_ANY_PORT
    	sock.httpportlist="80, 8080"
    

    a dane wpisałem na sztywno
    atmegadata = "20/bezchmurnie/77/10/11/Przejasnienia"
    i ta zmienna pobieram na stronie, jednak dalej nie ma żadnego efektu:/
  • #6 9890266
    KeinXor
    Poziom 24  
    Rozumiem że ustawienia które podałeś dotyczą gniazdka na jakim działa Twój „serwer www” natomiast mnie chodziło o gniazdko przez które łączysz się do serwisu z którego pobierasz dane. Z kodu jaki podałeś mniemam że jest to http://www.google.com/ig/api?hl=pl&weather=Poznan a dane jakie otrzymujemy są w postaci xml-a.
REKLAMA