Elektroda.pl
Elektroda.pl
X
Elektroda.pl
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

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

01 Wrz 2011 15:42 1413 5
  • Poziom 2  
    Potrzebuje sczytać za omocą Tibbo em1206 zawartość kanału rss.

    Próbuje
    Code:

    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
  • 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
  • Poziom 2  
    query jest procedurą umieszczoną w bibliotece DNS, którą pobrałem ze strony tibbo
    Code:

    '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
    Code:

    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:
    Code:

       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>
  • 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.
  • Poziom 2  
    zwiększyłem bufor
    Code:
       
    
            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:/
  • 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.