forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   PureBasic (http://forum.boolean.name/forumdisplay.php?f=90)
-   -   Данные из интернет странички (http://forum.boolean.name/showthread.php?t=17575)

Izunad 28.11.2012 20:30

Данные из интернет странички
 
Доброго времени суток. Столкнулся с такой задачей:
-Имеем страничку некого игрового сервера на котором отображается цифра текущего онлайна. Как вывести эту цифру программно? То есть как можно расшифровать страничку? Что для этого обязательно знать?
-PureBasic имеет в наличии готовый браузер, может ли это облегчить задачу?

Paranoia 28.11.2012 22:00

Ответ: Данные из интернет странички
 
Вот процедура с примером:
Код:

EnableExplicit

#server_ip = "ya.ru"
#server_host = "www.ya.ru"
#server_port = 80
#server_protocol = "HTTP/1.0"
#delay_part = 25

InitNetwork()

Procedure get_server_data(time_for_update.i, buffer_size.i)
  Protected connection_id.i = OpenNetworkConnection(#server_ip, #server_port, #PB_Network_TCP)
  If connection_id <> 0
    Protected string_to_send.s = "GET / " + #server_protocol + #CRLF$
    string_to_send + "Host: " + #server_host + #CRLF$
    string_to_send + "Connection: Close" + #CRLF$ + #CRLF$
   
    SendNetworkString(connection_id , string_to_send)
   
    Protected time_current.i = ElapsedMilliseconds()
    Protected time_limit.i = time_current + time_for_update
   
    Protected final_of_transmission.i = 0
   
    Define content.s
   
    Repeat   
      Select NetworkClientEvent(connection_id)
        Case #PB_NetworkEvent_Data
          Repeat
            Protected *memory_buffer = AllocateMemory(buffer_size)
            Protected received_size.i = ReceiveNetworkData(connection_id, *memory_buffer, buffer_size)
            Debug received_size
            If received_size = -1 Or received_size = 0
              FreeMemory(*memory_buffer)
              final_of_transmission.i = 1
              Break
            Else
              Protected received_size_global.i
              received_size_global + received_size
              Protected *memory_global = ReAllocateMemory(*memory_global, received_size_global)
              CopyMemory(*memory_buffer, *memory_global + (received_size_global - received_size), received_size)
              FreeMemory(*memory_buffer)
            EndIf
          ForEver
      EndSelect
     
      If final_of_transmission > 0
        CloseNetworkConnection(connection_id)
        content = PeekS(*memory_global, received_size_global)
        FreeMemory(*memory_global)
        Debug "Done!"
        Debug content
        Break
      Else
        ;timeout check call
        time_current = ElapsedMilliseconds()
        If time_current > time_limit
          ;status is timeout (server not responge)
          CloseNetworkConnection(connection_id)
          Debug "TimeOut!"
          Break
        Else
          Delay(#delay_part)
        EndIf
      EndIf
    ForEver
  Else
    Debug "Can not connect!"
  EndIf
EndProcedure

get_server_data(10000, 4096)

Будет принята страница с сайта ya.ru, тайм-аут приема данных — 10 сек., размер TCP-буффера — 4096 байт (вообще, это параметры).
В строке content на 53 строке будет содержимое страницы.

Меняете адреса, добавляете обработку ошибок (как минимум 69 и 61 строки) и готово.

Izunad 29.11.2012 19:33

Ответ: Данные из интернет странички
 
Работает, круто. Только вот беда в том что нужная инфа скрыватся под ява скриптом, как быть?

Paranoia 29.11.2012 19:42

Ответ: Данные из интернет странички
 
Можно пример страницы? Или лучше сразу её адрес в сети.

Izunad 30.11.2012 02:01

Ответ: Данные из интернет странички
 
Ну вот, пришла пора изучат JavaScripts =)


Часовой пояс GMT +4, время: 07:22.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot