Вопрос: Код не работает из библиотеки кодов. | Добавлено: 25.08.04 00:28 |
Автор вопроса: ![]() ![]() |
Речь идёт о получении html текста из интернета через API.
У меня тестбокс всегда пустой. Может кто поделится рабочим примером? Только не от IE. Достали меня эти браузеры. Хочу чтобы совсем быстро страница грузилась. Вот думаю через блокнот смотреть или окошко RichEdit'а создать на крайняк. Парсер я сам сделаю. Мне бы гипертекст получить с сайта. |
Ответы | Всего ответов: 39 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() ICQ: 295002202 Вопросов: 87 Ответов: 1684 |
Профиль | Цитата | #1 | Добавлено: 25.08.04 04:24 |
Попробуй
Private Const INTERNET_OPEN_TYPE_PRECONFIG = 0 Private Const INTERNET_OPEN_TYPE_DIRECT = 1 Private Const INTERNET_OPEN_TYPE_PROXY = 3 Private Const scUserAgent = "VB Project" Private Const INTERNET_FLAG_RELOAD = &H80000000 Private Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenA" (ByVal sAgent As String, ByVal lAccessType As Long, ByVal sProxyName As String, ByVal sProxyBypass As String, ByVal lFlags As Long) As Long Private Declare Function InternetOpenUrl Lib "wininet.dll" Alias "InternetOpenUrlA" (ByVal hOpen As Long, ByVal sUrl As String, ByVal sHeaders As String, ByVal lLength As Long, ByVal lFlags As Long, ByVal lContext As Long) As Long Private Declare Function InternetReadFile Lib "wininet.dll" (ByVal hFile As Long, ByVal sBuffer As String, ByVal lNumBytesToRead As Long, lNumberOfBytesRead As Long) As Integer Private Declare Function InternetCloseHandle Lib "wininet.dll" (ByVal hInet As Long) As Integer Private Function OpenURL(ByVal sUrl As String) As String Dim hOpen As Long Dim hOpenUrl As Long Dim bDoLoop As Boolean Dim bRet As Boolean Dim sReadBuffer As String * 2048 Dim lNumberOfBytesRead As Long Dim sBuffer As String hOpen = InternetOpen(scUserAgent, INTERNET_OPEN_TYPE_PRECONFIG, vbNullString, vbNullString, 0) hOpenUrl = InternetOpenUrl(hOpen, sUrl, vbNullString, 0, INTERNET_FLAG_RELOAD, 0) bDoLoop = True While bDoLoop sReadBuffer = vbNullString bRet = InternetReadFile(hOpenUrl, sReadBuffer, Len(sReadBuffer), lNumberOfBytesRead) sBuffer = sBuffer & Left$(sReadBuffer, lNumberOfBytesRead) If Not CBool(lNumberOfBytesRead) Then bDoLoop = False Wend If hOpenUrl <> 0 Then InternetCloseHandle (hOpenUrl) If hOpen <> 0 Then InternetCloseHandle (hOpen) OpenURL = sBuffer End Function Кажется это в VBNet.ru и взято ![]() |
Номер ответа: 2 Автор ответа: ![]() ![]() ![]() ICQ: 295002202 Вопросов: 87 Ответов: 1684 |
Профиль | Цитата | #2 | Добавлено: 25.08.04 04:25 |
У меня это работает |
Номер ответа: 3 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Offline Client ICQ: 204447456 Вопросов: 180 Ответов: 4229 |
Web-сайт: Профиль | Цитата | #3 | Добавлено: 25.08.04 21:47 |
Спасибо, то что нужно. |
Номер ответа: 4 Автор ответа: ![]() ![]() ![]() ![]() ICQ: 298621256 Вопросов: 57 Ответов: 304 |
Профиль | Цитата | #4 | Добавлено: 25.08.04 23:41 |
А как можно осуществить перекодировку из KOI8-R в Windows-1251? |
Номер ответа: 5 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Offline Client ICQ: 204447456 Вопросов: 180 Ответов: 4229 |
Web-сайт: Профиль | Цитата | #5 | Добавлено: 26.08.04 00:00 |
Ты имеешь ввиду есть ли такая API? Не думаю. Прийдётся наверное самому писать или через поисковик. По любому найдёшь. |
Номер ответа: 6 Автор ответа: ![]() ![]() ![]() ![]() ICQ: 298621256 Вопросов: 57 Ответов: 304 |
Профиль | Цитата | #6 | Добавлено: 26.08.04 00:29 |
Кажется нашел - вроде нужно использовать две функции
MultiByteToWideChar WideCharToMultiByte |
Номер ответа: 7 Автор ответа: ![]() ![]() ![]() ![]() ICQ: 298621256 Вопросов: 57 Ответов: 304 |
Профиль | Цитата | #7 | Добавлено: 26.08.04 00:53 |
Все!!! ![]() Супер получилось! Public Function Convert( _ ByVal sString As String, _ ByVal cpFrom As Long, _ ByVal cpTo As Long) As String ![]() ![]() lLenght = Len(sString) sDst = String(lLenght * 2, vbNullChar) sRet = String(lLenght * 2, vbNullChar) lRetval = MultiByteToWideChar( _ cpFrom, _ MB_PRECOMPOSED, _ sString, _ lLenght, _ sDst, _ lLenght _ ![]() lRetval = WideCharToMultiByte( _ cpTo, _ 0&, _ sDst, _ lRetval, _ sRet, _ lLenght * 2, _ ByVal 0&, _ 0 _ ![]() Convert = Left(sRet, lRetval) End Function |
Номер ответа: 8 Автор ответа: ![]() ![]() ![]() ![]() ICQ: 298621256 Вопросов: 57 Ответов: 304 |
Профиль | Цитата | #8 | Добавлено: 27.08.04 01:35 |
CyRax:
У меня в вышеуказанном коде InternetOpenUrl ужасно тормозит! У тебя как? |
Номер ответа: 9 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Offline Client ICQ: 204447456 Вопросов: 180 Ответов: 4229 |
Web-сайт: Профиль | Цитата | #9 | Добавлено: 27.08.04 21:15 |
То что ты показывал перекодирует из ANSI в UNICODE.
Да, тормозит. Я думал из за Dial-up'а. А ты думаешь почему? |
Номер ответа: 10 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 87 Ответов: 459 |
Профиль | Цитата | #10 | Добавлено: 27.08.04 21:20 |
2Lister:
> А как можно осуществить перекодировку из KOI8-R в Windows-1251? Скачай из раздела "ActiveX" контрол SimpleSMTP - там есть функция преобразования Win->KOI, несложно переделать её "наоборот". |
Номер ответа: 11 Автор ответа: ![]() ![]() ![]() ![]() ICQ: 298621256 Вопросов: 57 Ответов: 304 |
Профиль | Цитата | #11 | Добавлено: 28.08.04 02:18 |
Я уже самостоятельно сотворил код - ОТЛИЧНО работает! Но за совет спасибо! |
Номер ответа: 12 Автор ответа: ![]() ![]() ![]() ![]() ICQ: 298621256 Вопросов: 57 Ответов: 304 |
Профиль | Цитата | #12 | Добавлено: 28.08.04 02:21 |
1) То, что я показывал, также перекодирует из KOI8-R в Windows-1251 - я сегодня перекодировал около 9000 файлов... И сейчас продолжаю этим заниматься. 2) у меня выделенка - тормозит однозначно! Диалап не при чем. Тормозит именно использование этой функции. Почему - не знаю. На открытие урла тратится секунд 5-10, не меньше. |
Номер ответа: 13 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Offline Client ICQ: 204447456 Вопросов: 180 Ответов: 4229 |
Web-сайт: Профиль | Цитата | #13 | Добавлено: 28.08.04 19:00 |
Ну я могу ещё на PB потестить. Если и там тормозить будет, тогда наверное прийдётся что другое искать. Можно контрол DaSharm'а поковырять. Может там что нибудь удастся найти. |
Номер ответа: 14 Автор ответа: ![]() ![]() ![]() ![]() ICQ: 298621256 Вопросов: 57 Ответов: 304 |
Профиль | Цитата | #14 | Добавлено: 28.08.04 19:19 |
Но тормозит страшно, это факт... В компилированном виде не пробовал, но в режиме отладки у меня иногда ВСЯ система подвисает секунд на 15. А вообще у меня была такая задача: нужно было загрузить из сети и преобразовать из KOI8-R в WIN-1251 около 9000 файлов. Заняло несколько часов. Параллельно на компе вообще работать было нельзя ![]() |
Номер ответа: 15 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Offline Client ICQ: 204447456 Вопросов: 180 Ответов: 4229 |
Web-сайт: Профиль | Цитата | #15 | Добавлено: 28.08.04 20:24 |
Висит потому что цикл без DoEvents.
Сейчас попробую оптимизировать. Правда я это на PB делаю, так что для VB может и не проканать. |
|