purebasic.info

PureBasic forum
Текущее время: Чт янв 18, 2018 12:48 am

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 27 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Работа с vk.api: get запрос в linux
СообщениеДобавлено: Пн апр 21, 2014 5:42 pm 
Не в сети
доцент
Аватар пользователя

Зарегистрирован: Вс июл 14, 2013 10:04 pm
Сообщений: 30
Откуда: Новосибирск
Благодарил (а): 14 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Добрый вечер, уважаемые форумчане! Изучаю vk api, пилю ридер для вконтактовских групп...

А вопрос следующий: get запрос в моей приложке осуществляется посредством вот этого кода, взятого вот здесь http://www.purebasic.info/phpBB3ex/viewtopic.php?f=1&t=2597&start=30:

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
; определим константы и переменные
#scUserAgent = "IE7"
#INTERNET_OPEN_TYPE_DIRECT = 1
#INTERNET_OPEN_TYPE_PROXY = 3
#INTERNET_FLAG_RELOAD = $80000000
#sURL = "https://api.vk.com/method/isAppUser.xml?uid=ХХХХХ&access_token=ХХХХХХХХХХХХХХХХХХХХХХ"; Постав свои uid и access_token
 
Define  hOpen.l, hFile.l, sBuffer.s, Ret.l,Size.l
        ;//Откроем сессию.
    hOpen = InternetOpen_(scUserAgent, #INTERNET_OPEN_TYPE_DIRECT, 0,0, 0)
       ;Запросим файл с указанием всенепременно загрузить его с сервера
    hFile = InternetOpenUrl_(hOpen, #sURL, 0, 0, #INTERNET_FLAG_RELOAD,0)
Repeat
          ;выясним сколько нужно памяти для порции закачки
      InternetQueryDataAvailable_(hFile,@Size,0,0)
      If Size=0:Break: EndIf ; Пока порции выдают будем качать!
      sBuffer = Space(Size)
         ; считываем считываем очередную порцию
         InternetReadFile_(hFile, @sBuffer, Size, @Ret)
         Debug sBuffer
            FileHtml$+sBuffer; Текст целиком ТУТ!
       Delay(1)
     ForEver
         
         ; Освободим ресурсы
  InternetCloseHandle_(hFile)
  InternetCloseHandle_(hOpen)



А как нечто подобное можно реализовать под linux?

Заранее спасибо ^_^

_________________
Ms Windows 7 SP1 (x64) | Linux Kubuntu 14.04 (x86) | PureBasic 5.30 (x86)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Работа с vk.api: get запрос в linux
СообщениеДобавлено: Пн апр 21, 2014 6:43 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Чт июн 25, 2009 1:02 pm
Сообщений: 2241
Откуда: Russia — Belarus
Благодарил (а): 0 раз.
Поблагодарили: 67 раз.
Пункты репутации: 11
У PB нет нативной (полноценной) поддержки HTTP, и уже тем-более HTTPS.
Я не рассматриваю вариант, что человек будет самостоятельно общаться с WEB сервером на TCP\IP уровне.
Скорее всего придётся использовать cURL.

_________________
EnableExplicit User


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Работа с vk.api: get запрос в linux
СообщениеДобавлено: Пн апр 21, 2014 9:01 pm 
Не в сети
доцент
Аватар пользователя

Зарегистрирован: Вс июл 14, 2013 10:04 pm
Сообщений: 30
Откуда: Новосибирск
Благодарил (а): 14 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Итак, попытался заюзать curl... Данную процедуру взял из кодоархива из примера обращения с vk api, однако, данный код не работает :(

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
InitNetwork()
 
XIncludeFile "RW_LibCurl_Inc.pb"
Global curl  = curl_easy_init()
url$="GET /method/users.get?user_id=66748&v=5.21&access_token=533bacf01e11f55b536a565b57531ac114461ae8736d6506a3 HTTPS/1.1 "
 
Procedure.s GetVK(url$)
 
RW_LibCurl_InitString()
curl_easy_setopt(curl, #CURLOPT_URL, @url$)
curl_easy_setopt(curl, #CURLOPT_FOLLOWLOCATION, 1)
curl_easy_setopt(curl, #CURLOPT_USERAGENT, @"Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.2.15 Version/10.00")
curl_easy_setopt(curl, #CURLOPT_REFERER, @"http://vkontakte.ru/")
 
curl_easy_setopt(curl, #CURLOPT_WRITEFUNCTION, @RW_LibCurl_WriteStrFunction())
curl_easy_perform(curl)
res.s = RW_LibCurl_GetString()
 
ProcedureReturn res
EndProcedure
 
Debug GetVK(url$)



"Что я делаю не так?" (Р)

_________________
Ms Windows 7 SP1 (x64) | Linux Kubuntu 14.04 (x86) | PureBasic 5.30 (x86)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Работа с vk.api: get запрос в linux
СообщениеДобавлено: Вт апр 22, 2014 10:17 am 
Не в сети
профессор

Зарегистрирован: Пн янв 03, 2011 4:27 pm
Сообщений: 400
Благодарил (а): 5 раз.
Поблагодарили: 17 раз.
Пункты репутации: 0
EM140, а так попробуй
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
InitNetwork()
XIncludeFile "RW_LibCurl_Res.pb"
XIncludeFile "RW_LibCurl_Inc.pb"
url.s = "https://api.vk.com/method/users.get.xml?user_id=66748&v=5.21&access_token=533bacf01e11f55b536a565b57531ac114461ae8736d6506a3"
curl  = curl_easy_init()
fp  = CreateFile(#PB_Any, "C:\Sample_1_SourceForge.xml")
If curl
  Debug curl_easy_setopt(curl, #CURLOPT_URL, @url)
  Debug curl_easy_setopt(curl, #CURLOPT_SSL_VERIFYPEER, 0)
  Debug curl_easy_setopt(curl, #CURLOPT_SSL_VERIFYHOST, 0)
  Debug curl_easy_setopt(curl, #CURLOPT_HEADER, 0)
  Debug curl_easy_setopt(curl, #CURLOPT_WRITEFUNCTION, @RW_LibCurl_WriteFunction())
  res = curl_easy_perform(curl)
  Debug res  
  WriteString(fp, RW_LibCurl_GetData(), 0)
  CloseFile(fp)  
  Debug curl_easy_cleanup(curl)
EndIf



Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Работа с vk.api: get запрос в linux
СообщениеДобавлено: Вт апр 22, 2014 12:14 pm 
Не в сети
доцент
Аватар пользователя

Зарегистрирован: Вс июл 14, 2013 10:04 pm
Сообщений: 30
Откуда: Новосибирск
Благодарил (а): 14 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Попробывал, purebasic при компиляции выдал вот это:

Line 12: RW_LibCurl_WriteFunction() is not declared

Сегодня накачу в виртуалке windows, если ошибка там не вылезет, то всё пичально :(

_________________
Ms Windows 7 SP1 (x64) | Linux Kubuntu 14.04 (x86) | PureBasic 5.30 (x86)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Работа с vk.api: get запрос в linux
СообщениеДобавлено: Вт апр 22, 2014 12:20 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11077
Благодарил (а): 4 раз.
Поблагодарили: 384 раз.
Согласно документации, это процедура в коде, а не функция Curl.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Работа с vk.api: get запрос в linux
СообщениеДобавлено: Вт апр 22, 2014 3:53 pm 
Не в сети
доцент
Аватар пользователя

Зарегистрирован: Вс июл 14, 2013 10:04 pm
Сообщений: 30
Откуда: Новосибирск
Благодарил (а): 14 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Пробую заюзать код @ZOLO@, однако...

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
InitNetwork()
XIncludeFile "RW_LibCurl_Res.pb"
XIncludeFile "RW_LibCurl_Inc.pb"
url.s = "https://api.vk.com/method/users.get.xml?user_id=66748&v=5.21&access_token=533bacf01e11f55b536a565b57531ac114461ae8736d6506a3"
curl  = curl_easy_init()
fp  = CreateFile(#PB_Any, "Sample_1_SourceForge.xml")
If curl
  Debug curl_easy_setopt(curl, #CURLOPT_URL, @url)
  Debug curl_easy_setopt(curl, #CURLOPT_SSL_VERIFYPEER, 0)
  Debug curl_easy_setopt(curl, #CURLOPT_SSL_VERIFYHOST, 0)
  Debug curl_easy_setopt(curl, #CURLOPT_HEADER, 0)
  Debug curl_easy_setopt(curl, #CURLOPT_WRITEFUNCTION, @RW_LibCurl_WriteStrFunction())
  res = curl_easy_perform(curl)
  Debug res
  WriteString(fp, RW_LibCurl_GetData(), 0)
  CloseFile(fp)
  Debug curl_easy_cleanup(curl)
EndIf



Purebasic ругается: Line 15: Bad Parametr type: a string is expected.

Как можно заставить этот фрагмент кода работать?

_________________
Ms Windows 7 SP1 (x64) | Linux Kubuntu 14.04 (x86) | PureBasic 5.30 (x86)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Работа с vk.api: get запрос в linux
СообщениеДобавлено: Ср апр 23, 2014 1:07 am 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Чт июн 25, 2009 1:02 pm
Сообщений: 2241
Откуда: Russia — Belarus
Благодарил (а): 0 раз.
Поблагодарили: 67 раз.
Пункты репутации: 11
Ну там так и написано, что для WriteString() нужна строка, а функция RW_LibCurl_GetData() судя по всему возвращает черт пойми что, но не строку. Её то и надо крутить.
Код:
1
2
3
4
5
6
7
8
9
Procedure.s RW_LibCurl_GetData()
  Shared ReceivedData.s
  Protected ReturnData.s
 
  ReturnData.s = ReceivedData.s
  ReceivedData.s = ""
 
  ProcedureReturn ReturnData.s
EndProcedure


_________________
EnableExplicit User


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Работа с vk.api: get запрос в linux
СообщениеДобавлено: Ср апр 23, 2014 8:19 am 
Не в сети
доцент
Аватар пользователя

Зарегистрирован: Вс июл 14, 2013 10:04 pm
Сообщений: 30
Откуда: Новосибирск
Благодарил (а): 14 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Большое спасибо! Всё заработало ^_^

_________________
Ms Windows 7 SP1 (x64) | Linux Kubuntu 14.04 (x86) | PureBasic 5.30 (x86)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Работа с vk.api: get запрос в linux
СообщениеДобавлено: Ср апр 23, 2014 10:22 am 
Не в сети
доцент
Аватар пользователя

Зарегистрирован: Вс июл 14, 2013 10:04 pm
Сообщений: 30
Откуда: Новосибирск
Благодарил (а): 14 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Очередная трабла: походу curl не умеет unicode :(

Юзаю следующий код в своей приложке - полёт нормальный...

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Procedure.s RW_LibCurl_GetData2()
  Shared ReceivedData.s
  Protected ReturnData.s
 
  ReturnData.s = ReceivedData.s
  ReceivedData.s = ""
 
  ProcedureReturn ReturnData.s
EndProcedure
 
Procedure.s GetURL(url.s)
  curl  = curl_easy_init()
  If curl
    curl_easy_setopt(curl, #CURLOPT_URL, @url)
    curl_easy_setopt(curl, #CURLOPT_SSL_VERIFYPEER, 0)
    curl_easy_setopt(curl, #CURLOPT_SSL_VERIFYHOST, 0)
    curl_easy_setopt(curl, #CURLOPT_HEADER, 0)
    curl_easy_setopt(curl, #CURLOPT_WRITEFUNCTION, @RW_LibCurl_WriteStrFunction())
    res = curl_easy_perform(curl)
   
    ProcedureReturn RW_LibCurl_GetData2()
   
    curl_easy_cleanup(curl)
  Else
    Debug "Warning! cURL no init!"
  EndIf
EndProcedure



Но, как известно, если под linux в настройках purebasic не включить поддержку юникода, то не видать русских букавок, так вот - включаю галочку "Create unicode executable", и данный код возращает пустую строку :( Пичаль-беда :(((

Реально ли заставить curl подружиться с юникодом?

_________________
Ms Windows 7 SP1 (x64) | Linux Kubuntu 14.04 (x86) | PureBasic 5.30 (x86)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Работа с vk.api: get запрос в linux
СообщениеДобавлено: Ср апр 23, 2014 11:22 am 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Чт дек 17, 2009 4:49 pm
Сообщений: 1230
Откуда: г. Ангарск
Благодарил (а): 2 раз.
Поблагодарили: 15 раз.
Пункты репутации: 10
EM140 писал(а):
Реально ли заставить curl подружиться с юникодом?

Реально. Переведи врапер в юникод. Т.е. создай новый файл в юникоде, и скопируй из старого всё в новый.

_________________
.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Работа с vk.api: get запрос в linux
СообщениеДобавлено: Ср апр 23, 2014 11:58 am 
Не в сети
доцент
Аватар пользователя

Зарегистрирован: Вс июл 14, 2013 10:04 pm
Сообщений: 30
Откуда: Новосибирск
Благодарил (а): 14 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Вроде бы перевёл файлы "RW_LibCurl_Res.pbi" и "RW_LibCurl_Inc.pbi" в UTF-8, но увы :(


Вложения:
VKReader.zip [21.3 KiB]
Скачиваний: 217

_________________
Ms Windows 7 SP1 (x64) | Linux Kubuntu 14.04 (x86) | PureBasic 5.30 (x86)
Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Работа с vk.api: get запрос в linux
СообщениеДобавлено: Ср апр 23, 2014 3:57 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Пт янв 27, 2012 7:12 pm
Сообщений: 880
Откуда: Кустанай
Благодарил (а): 27 раз.
Поблагодарили: 13 раз.
Пункты репутации: 7
Код:
1
2
3
ProcedureReturn RW_LibCurl_GetData2()
   
curl_easy_cleanup(curl)


Процедура завершается до завершения работы курла, будет кушать ресурсы.

Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
Procedure$ UtfToAnsi(String$) 
    Protected x.l
     
    For x = 128 To 143
       String$ = ReplaceString(String$, Chr(209) + Chr(x), Chr(x + 112))
    Next
     
    For x = 144 To 191
       String$ = ReplaceString(String$, Chr(208) + Chr(x), Chr(x + 48))
    Next
     
    String$ = ReplaceString(String$, Chr(208) + Chr(129), Chr(168))
     
    String$ = ReplaceString(String$, Chr(209) + Chr(145), Chr(184))
     
    ProcedureReturn String$
 EndProcedure
 
Procedure.s RW_LibCurl_GetData2()
  Shared ReceivedData.s
  Protected ReturnData.s
 
  ReturnData.s = ReceivedData.s
  ReceivedData.s = ""
 
  ProcedureReturn ReturnData.s
EndProcedure
 
Procedure.s GetURL(url.s)
  curl  = curl_easy_init()
  If curl
    curl_easy_setopt(curl, #CURLOPT_URL, @url)
    curl_easy_setopt(curl, #CURLOPT_SSL_VERIFYPEER, 0)
    curl_easy_setopt(curl, #CURLOPT_SSL_VERIFYHOST, 0)
    curl_easy_setopt(curl, #CURLOPT_HEADER, 0)
    curl_easy_setopt(curl, #CURLOPT_WRITEFUNCTION, @RW_LibCurl_WriteStrFunction())
    res = curl_easy_perform(curl)
   
    result_html.s = RW_LibCurl_GetData2()
    result_html.s = UtfToAnsi(result_html.s)
   
    curl_easy_cleanup(curl)
   
    ProcedureReturn result_html.s
  Else
    Debug "Warning! cURL no init!"
  EndIf
EndProcedure



Данный пример наткнувшись на анси, всё равно переведёт результат в анси и тогда не только русских букоф не видать.

_________________
Детям нельзя в интернет. От детей интернет тупеет.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Работа с vk.api: get запрос в linux
СообщениеДобавлено: Ср апр 23, 2014 4:27 pm 
Не в сети
доцент
Аватар пользователя

Зарегистрирован: Вс июл 14, 2013 10:04 pm
Сообщений: 30
Откуда: Новосибирск
Благодарил (а): 14 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
m0t0d0r писал(а):
Процедура завершается до завершения работы курла, будет кушать ресурсы.


ОК, поправил ^_^

m0t0d0r писал(а):
Данный пример наткнувшись на анси, всё равно переведёт результат в анси и тогда не только русских букоф не видать.


Вот этот момент я не совсем понял...

З. Ы. Проблема в том что при включении юникода в настройках purebasic curl возращает не карюгазябы, а вообще ничего не возращает :(((

_________________
Ms Windows 7 SP1 (x64) | Linux Kubuntu 14.04 (x86) | PureBasic 5.30 (x86)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Работа с vk.api: get запрос в linux
СообщениеДобавлено: Ср апр 23, 2014 4:51 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Пт янв 27, 2012 7:12 pm
Сообщений: 880
Откуда: Кустанай
Благодарил (а): 27 раз.
Поблагодарили: 13 раз.
Пункты репутации: 7
EM140 писал(а):
m0t0d0r писал(а):
З. Ы. Проблема в том что при включении юникода в настройках purebasic curl возращает не карюгазябы, а вообще ничего не возращает :(((

Не надо включать юникод, работай с анси, как и работал.
UtfToAnsi(String$) берет html текс в юникоде и переводит в анси, но если текст уже в анси, то процедура этого не поймёт и всё равно переведет код в анси и тогда будут пробеммы. Как вариант, смотреть в хидерах, в каком формате html код, приходящий с сервера.

_________________
Детям нельзя в интернет. От детей интернет тупеет.


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 27 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB