1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Webservice PSI20

Discussão em 'Web Development' iniciada por metRo_, 10 de Outubro de 2008. (Respostas: 30; Visualizações: 2905)

  1. metRo_

    metRo_ Power Member

  2. AliFromCairo

    AliFromCairo Power Member

    A maioria dos sites não disponibiliza essa informação toda em forma de WebService. No entanto, podes utilizar técnicas de web scraping para obter os dados que pretendas. Podes por exemplo utilizar expressões regulares para obteres as cotações. Alternativamente, tenta ver se existe alguma coisa no site da Euronext, por exemplo.
     
  3. xuxaki

    xuxaki Power Member

  4. metRo_

    metRo_ Power Member

  5. krunch

    krunch Power Member

    O site vende alguma coisa?
    Vais cobrar o acesso ao stock broker?
    Qual o contexto de utilização?
     
  6. metRo_

    metRo_ Power Member

    Não vende nada, vai ser para colocar numa espécie de RSS Reader. Eu estou a usar Flash para abrir os webservices. Encontrei um com tempo e funcionou direitinho embora muito lento, mas foi só para testes. Tentei testar este: http://www.itcomponents.net/WebServices/PSI20CotacoesWebService.asmx e era o que eu queria mas deu um erro quando faço GetCotacao :S
     
  7. AliFromCairo

    AliFromCairo Power Member

    Interessante. Encontrei o blog da pessoa que supostamente fez esse WebService e, tal como era de esperar, utilizou técnicas de screen scraping :007:.

    Tens um programa muito bom para web harvesting chamado Web Harvest, que é feito em Java. Dá uma vista de olhos pelo site oficial, pois desta forma escusas de fazer tudo de raiz, embora não seja muito complicado, pois as cotações encontram-se normalmente bem estruturadas numa tabela.
     
  8. metRo_

    metRo_ Power Member

    Mas conseguis-te usar esse webservice? É que eu não consegui fazer o GetCotacoes desse webservice :S

    Mas essa aplicação precisa de estar num servidor dedicado?
     
    Última edição: 11 de Outubro de 2008
  9. AliFromCairo

    AliFromCairo Power Member

    Aparentemente o WS tem alguns problemas. De qualquer forma, podes tentar fazer o programa para obter os dados. Posso tentar ajudar-te, mas indica-me qual é a linguagem que estás a utilizar, bem como o formato em que pretendes os dados.
     
  10. metRo_

    metRo_ Power Member

    No final os dados vão ser usados em flash por isso se vierem em XML está optimo.

    Isso depois percisa de correr num servidor dedicado ou simples alojamento serve? É que se for perciso servidor dedicado nem vale a pena continuar :p

    Fontes temos:
    - http://www.destakes.com/bolsa/ no canto inferior direito.
    - http://www.jornaldenegocios.pt/index.php?template=popup_ticker&popup=1 ticker
    - http://noticias.sapo.pt/bolsa/
    - http://app2.diarioeconomico.com/de/bolsa/Ficha?cod=I.PS
    - http://www.agenciafinanceira.iol.pt/bolsas.php?cod_bolsa=LS&codigo_lista=6
    - http://www.nextbolsa.com/cotacoes/ticker.php?index=psi20 ticker
    - http://www.nextbolsa.com/cotacoes.php?action=psi20

    Encontrei um site frances com o PSI20 se calhar é capaz de dar menos problemas: http://bourse.fininfo.fr/fininfo/GetMarche.event?lg=fr se selecionares PSI20 e carregares em ok ves as cotações, tinha-mos era que descobrir o link disso.

    Temos aqui possiveis fontes. Se calhar consegues perceber melhor as melhores embora me pareça que os tickers tenham menos informação que não nos interesse.

    Quanto à linguagem pode-se usar essa em java que falaste.
    Estou a ler o site.

    Obrigado pela ajuda.
     
    Última edição: 11 de Outubro de 2008
  11. AliFromCairo

    AliFromCairo Power Member

    Boas, não precisas de nenhum servidor dedicado. Utilizando o Web harvest, criei um ficheiro de configuração em XML para obter as cotações a partir da página da bolsa do sapo (foi o primeiro que testei e felizmente a estrutura era muito simples para web scraping). O conteúdo do ficheiro é o seguinte:

    Código:
    <?xml version="1.0" encoding="UTF-8"?>
    <config charset="UTF-8">
        <!-- define o url --> 
        <var-def name="url">http://noticias.sapo.pt/bolsa/</var-def>    
        <!-- obtém as cotações e gera um ficheiro xml -->
      <file action="write" path="psi20/cotacoes.xml" charset="UTF-8">
      <![CDATA[ 
       <cotacoes>
      ]]>
      <empty>
       <var-def name="content">
        <html-to-xml omitcomments="true" specialentities="false">
         <http url="${url}"/>
        </html-to-xml>    
       </var-def>
       <var-def name="quotes">
        <xpath expression="//ul[@class='quotes']">
         <var name="content"/>
        </xpath>
       </var-def>
      </empty>
      <xquery>
       <xq-param name="doc" type="node()">
        <var name="quotes"/>
       </xq-param>
       <!-- gera os nós para cada empresa  -->
       <xq-expression>
       <![CDATA[
        declare variable $doc as node() external;
        for $i in $doc//li[@id = 'even' or @id = 'odd']
        return 
         <empresa>
          <nome>{normalize-space($i/span/a)}</nome>
          <preco>{data($i/span[@id='value'])}</preco>
          <percentagem>{data($i/span[@id='perc'])}</percentagem>
          <volume>{data($i/span[@id='volume'])}</volume>
         </empresa>
       ]]>
       </xq-expression>
      </xquery> 
      <![CDATA[
       </cotacoes> 
      ]]>
     </file>
    </config>
    
    O resultado é um ficheiro XML com os seguintes dados:

    Código:
    <cotacoes>
    <empresa>
       <nome>ALTRI SGPS SA</nome>
       <preco>1.530 &amp;euro;</preco>
       <percentagem>-7.27 %</percentagem>
       <volume>616 816</volume>
    </empresa>
    <empresa>
       <nome>B.COM.PORTUGUES</nome>
       <preco>0.930 &amp;euro;</preco>
       <percentagem>-4.62 %</percentagem>
       <volume>26 813 743</volume>
    </empresa>
    <empresa>
       <nome>B.ESPIRITO SANTO</nome>
       <preco>7.836 &amp;euro;</preco>
       <percentagem>-6.38 %</percentagem>
       <volume>1 134 608</volume>
    </empresa>
    <empresa>
       <nome>BANCO BPI SA</nome>
       <preco>1.780 &amp;euro;</preco>
       <percentagem>-3.26 %</percentagem>
       <volume>6 266 309</volume>
    </empresa>
    <empresa>
       <nome>BRISA</nome>
       <preco>6.260 &amp;euro;</preco>
       <percentagem>-3.10 %</percentagem>
       <volume>1 685 937</volume>
    </empresa>
    <empresa>
       <nome>CIMPOR SGPS</nome>
       <preco>3.200 &amp;euro;</preco>
       <percentagem>-4.02 %</percentagem>
       <volume>1 340 810</volume>
    </empresa>
    <empresa>
       <nome>EDP</nome>
       <preco>2.241 &amp;euro;</preco>
       <percentagem>-2.52 %</percentagem>
       <volume>25 119 059</volume>
    </empresa>
    <empresa>
       <nome>GALP ENERGIA</nome>
       <preco>8.020 &amp;euro;</preco>
       <percentagem>-11.72 %</percentagem>
       <volume>3 679 135</volume>
    </empresa>
    <empresa>
       <nome>J MARTINS SGPS</nome>
       <preco>4.600 &amp;euro;</preco>
       <percentagem>-6.98 %</percentagem>
       <volume>3 216 588</volume>
    </empresa>
    <empresa>
       <nome>MOTA ENGIL</nome>
       <preco>2.124 &amp;euro;</preco>
       <percentagem>-7.65 %</percentagem>
       <volume>676 613</volume>
    </empresa>
    <empresa>
       <nome>EDP RENOVAVEIS</nome>
       <preco>4.050 &amp;euro;</preco>
       <percentagem>-9.40 %</percentagem>
       <volume>1 351 405</volume>
    </empresa>
    <empresa>
       <nome>PORTUCEL</nome>
       <preco>1.610 &amp;euro;</preco>
       <percentagem>-2.13 %</percentagem>
       <volume>1 651 287</volume>
    </empresa>
    <empresa>
       <nome>PORTUGAL TELECOM</nome>
       <preco>5.264 &amp;euro;</preco>
       <percentagem>-9.16 %</percentagem>
       <volume>6 331 305</volume>
    </empresa>
    <empresa>
       <nome>REN</nome>
       <preco>2.300 &amp;euro;</preco>
       <percentagem>-2.34 %</percentagem>
       <volume>733 535</volume>
    </empresa>
    <empresa>
       <nome>SEMAPA</nome>
       <preco>6.050 &amp;euro;</preco>
       <percentagem>-3.51 %</percentagem>
       <volume>578 028</volume>
    </empresa>
    <empresa>
       <nome>SONAE INDUSTRIA</nome>
       <preco>1.540 &amp;euro;</preco>
       <percentagem>-6.78 %</percentagem>
       <volume>820 282</volume>
    </empresa>
    <empresa>
       <nome>SONAE SGPS</nome>
       <preco>0.416 &amp;euro;</preco>
       <percentagem>-7.14 %</percentagem>
       <volume>17 195 411</volume>
    </empresa>
    <empresa>
       <nome>SONAECOM SGPS</nome>
       <preco>1.194 &amp;euro;</preco>
       <percentagem>-8.15 %</percentagem>
       <volume>519 616</volume>
    </empresa>
    <empresa>
       <nome>TEIXEIRA DUARTE</nome>
       <preco>0.802 &amp;euro;</preco>
       <percentagem>-5.09 %</percentagem>
       <volume>1 095 323</volume>
    </empresa>
    <empresa>
       <nome>ZON MULTIMEDIA</nome>
       <preco>4.100 &amp;euro;</preco>
       <percentagem>-0.41 %</percentagem>
       <volume>880 740</volume>
    </empresa>
    </cotacoes>
    
    Penso que consegues fazer o mesmo directamente com Flash, utilizando a "API" de XPath.

    Para testares, precisas de fazer o download do jar do web harvest e executar o seguinte comando:

    Código:
    rem webharvest.jar é o .jar que obtiveste no site que te indiquei (pode ter outro nome, consoante a versão)
    rem config.xml é o nome que vais dar ao ficheiro de configuração .xml cujo conteúdo coloquei acima
    rem work-dir é uma pasta para onde vai o resultado
     
    java -jar webharvest.jar config=config.xml workdir=work-dir/
    
    Espero que ajude. Qualquer dúvida coloca aqui.
     
  12. metRo_

    metRo_ Power Member

    Muito obrigado, eu ja tinha feito o download da web-harvest com ambiente grafico foi só colar e run e criou logo o xml.

    Só que eu quero que iso corra quando alquem percisar da informação, estás a perceber?
     
  13. AliFromCairo

    AliFromCairo Power Member

    Hmm, o que tu queres portanto é obter esse XML quando um determinado evento acontece (e.g. utilizador carrega num botão qualquer). Nesse caso, e uma vez que estás a usar Flash, podes tentar fazer o mesmo que esse programa faz em Flash utilizando XPath. Alternativamente, podes criar um cronjob que executa o "web harvest" de x em x minutos e grava o resultado no disco, ou seja, obtém as cotações de x em x minutos. Em seguida, no Flash, basta leres esse ficheiro como resposta a uma determinada acção do utilizador.
     
  14. metRo_

    metRo_ Power Member

    Pois daí eu ter insistido na necessidade do servidor dedicado :S
    Visto o objectivo ser o flash correr no telémovel não me parece que essa seja a melhor maneira. Mas por exemplo através de php é possivel? O Flash executava o php no servidor este criava o xml e depois o flash lia o xml.
    Mas obrigado na mesma pois já se fez mais luz sobre este assunto :)
     
  15. AliFromCairo

    AliFromCairo Power Member

    Repara que não precisas de um servidor dedicado para correres um cronjob. A maioria dos serviços de alojamento permite-te fazer isso.

    Em relação ao PHP, podes perfeitamente fazer isso e podes inclusivé utilizar a técnica que referi no post anterior, ou seja, obténs o XML de x em x tempo e o PHP quando recebe um pedido da aplicação Flash a única coisa que faz é enviar esse XML para o telemóvel.
     
  16. metRo_

    metRo_ Power Member

    Podes-me só dar umas luzes de como fazer isto em php? depois do php criar o xml, o flash abre directamente o xml, nem percisa de recorrer ao php. Eu só quero é que aquilo que fizemos no Web Harvest seja feito de maneira a correr num alojamento normal. dai ter falado no php. :)
     
  17. AliFromCairo

    AliFromCairo Power Member

    Num alojamento normal, deverás poder criar cronjobs (penso que até podes fazer isso no cPanel). Por exemplo, se quiseres utilizar o web harvest para obter as cotações de hora em hora, deverás ter que adicionar o seguinte ao crontab:

    Código:
    00 * * * * java -jar webharvest.jar config=config.xml workdir=work-dir/
    
    Isto vai fazer com que de hora em hora, seja criado um novo ficheiro XML com as cotações na pasta que definiste no workdir.

    Em seguida, o Flash tem que enviar um pedido para um script qualquer em PHP (procura no google por "flash php communication" pois existem bastantes artigos a falar deste tema). Esse script PHP a única coisa que vai fazer é ler o ficheiro XML gerado (e que se encontra na workdir) e enviar para o Flash.
     
  18. metRo_

    metRo_ Power Member

    Em relação ao flash ir buscar o xml, eu sei como se faz, o flash não percisa do php, ele vai buscar directamente o http://asdasdasdasd/asdasd/asdasd.xml é so por o link que ele depois tem classes para trabalhar com o xml. A minha duvida é como correr java no servidor :S Qual é o webharvest.jar que devo colocar no servidor.

    Criei uma conta no X10Hosting que permite cronjobs, por pm mandei-te os dados, é que lá aparece um campo para enviar um email com o resultado, mas o resultado, neste caso o xml devia ser criado dentro do alojamento e não enviado por email.
     
    Última edição: 12 de Outubro de 2008
  19. AliFromCairo

    AliFromCairo Power Member

    Sim, certo. Podes colocar a caixa de texto vazia para não receberes o e-mail do cron daemon. Basicamente o que tens de fazer é colocar o seguinte no cronjob:

    Código:
    00 * * * * java -jar /home/[utilizador]/webharvest_all_1.jar config=/home/[utilizador]/config.xml workdir=/home/[utilizador]/public_html/rss
    
    Podes fazer o dowload do .jar através deste link.

    A ideia aqui é que de hora em hora, esse cronjob irá correr e vai executar o config.xml que deverá estar na pasta /home/[utilizador]. Em seguida, o output irá ser guardado na pasta public_html/rss de forma a poderes aceder ao XML através de http://www.site.com/~utilizador/cotacoes.xml.

    Para testares, corre o comando "java ..." acima manualmente, e verifica que o ficheiro cotacoes.xml foi colocado na pasta public_html/rss.
     
  20. metRo_

    metRo_ Power Member

    desculpa a "ignorância" mas como faço para correr esse comando manualmente no servidor?

    Mais uma vez obrigado pelas tuas ajudas :)
     

Partilhar esta Página