Sidebar

Парсинг Интернет страниц

qpAHToMAS

Administrator
Команда форума
Администратор
22.10.2006
9 323
33
  • Золотая медаль 215
  • Золотая медаль 152
  • Серебряная медаль 136
  • Золотая медаль 221
Парсинг Интернет страниц

Есть много идей по созданию программ, которые работают с Интернет сайтами, например, хостинг картинок через контекстное меню (вставка адреса изображения в форму, загрузка, копирование URL загруженной картинки), узнавание баланса Интернет счета (вставка данных пользователя в формы (логин, пароль), вход, поиск нужной информации на странице) и т.д.

Опыт и знания в этой области нулевые, что я собираюсь исправить :). По этому вопрос: как, и на чем это лучше всего сделать? Интересует именно создание программ (Windows, .exe), а не WEB скриптов, типа PHP.
 
Последнее редактирование:

TwisteR

VIP
VIP
24.07.2006
4 045
  • Серебряная медаль 311
  • Золотая медаль 115
  • Серебряная медаль 215
2 qpAHToMAS:
Сам сейчас занимаюсь подобным, только разбираю не готовые веб страницы, а сгенеренные моим же php-скриптом, но сути дела это не меняет. Рекомендую использовать фреймворк Qt (С++). Имеет богатый набор классов для проектирования графического интерфейса, а так же кучу классов на все случаи жизни. В частности, классы, реализующие сетевые протоколы (http, ftp), классы XML-парсеров, работа с графикой (в т.ч. и OpenGL) и много чего другого :)

Имеется удобная студия разработки QtCreator, первая стабильная версия которой вышла совсем недавно :)

Вот ссылки:
Страница загрузок, демо-ролики внизу
Описание главных классов Qt 4.5
Класс для работы с HTTP (get/post-запросы, генерирование и разбор URL, формирование и анализ header'ов и т.п.)
XML-классы
 
Последнее редактирование:

qpAHToMAS

Administrator
Команда форума
Администратор
22.10.2006
9 323
33
  • Золотая медаль 215
  • Золотая медаль 152
  • Серебряная медаль 136
  • Золотая медаль 221
Фух, ну и задачка, выучить такое...
В любом случае Qt скачал, спасибо за направление :).
 

qpAHToMAS

Administrator
Команда форума
Администратор
22.10.2006
9 323
33
  • Золотая медаль 215
  • Золотая медаль 152
  • Серебряная медаль 136
  • Золотая медаль 221
А что делать, если загрузка изображений на сайт производится не через простую форму, а через Flash объект (Adobe Flash Player)? Так сделано на http://imageshack.us/.
Мне кажется это в корне меняет дело, или ничего страшного?
 

ka3a4ok

царь иудейский
28.02.2009
420
qpAHToMAS сказал(а):
А что делать, если загрузка изображений на сайт производится не через простую форму, а через Flash объект (Adobe Flash Player)? Так сделано на http://imageshack.us/.
Мне кажется это в корне меняет дело, или ничего страшного?
Да вроде там вполне обычная форма загрузки %)
 

ka3a4ok

царь иудейский
28.02.2009
420
Код:
<iframe src="http://www.imageshack.us/iframe.php?txtcolor=111111&type=blank&size=30" scrolling="no" allowtransparency="true" frameborder="0" width="300" height="80"></iframe>
 

ka3a4ok

царь иудейский
28.02.2009
420
2 TwisteR: дошло)))
Кстати, есть гномовские аплеты загрузок тех же картинок на обменники - посмотри исходники. И для ФФ дополнение есть...
Оффтоп
 

qpAHToMAS

Administrator
Команда форума
Администратор
22.10.2006
9 323
33
  • Золотая медаль 215
  • Золотая медаль 152
  • Серебряная медаль 136
  • Золотая медаль 221
Sandman сказал(а):
И для ФФ дополнение есть...
Как правило они убогие, типа: делают простую загрузку по URL картинки, т.е. картинки из локальных ресурсах сразу отсекаются. Про загрузку из компьютера вообще молчу :).

TwisteR сказал(а):
Флуд прекращаем. Сейчас попробую наваять пример кода, постящего картинку на ImageShack.
С удовольствием бы глянул, хотя вряд ли что пойму :agy:.

И еще вот проблема, мне бы GUI как-нибудь оживить :spy:.
 
Последнее редактирование:

3y6acTuK

New member
17.03.2007
1 055
1
0
  • Золотая медаль 231
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls, IdIOHandler, IdIOHandlerSocket, IdIOHandlerStack,
  IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP, IdMultipartFormData;

type
  TForm1 = class(TForm)
    IdHTTP1: TIdHTTP;
    Edit1: TEdit;
    Button1: TButton;
    OpenDialog1: TOpenDialog;
    Button2: TButton;
    IdIOHandlerStack1: TIdIOHandlerStack;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure OpenDialog1SelectionChange(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure post;
var post : TIdMultiPartFormDataStream;
    szFileName : string;
    szType     : String;
begin
  szFileName  := form1.edit1.text;
  szType      := 'image/' + ExtractFileExt(szFileName);
  Delete(szType, Pos('.', szType), 1);

  post :=   TIdMultiPartFormDataStream.Create;
  post.AddFile('file', szFileName, szType);

  form1.idhttp1.HandleRedirects := True;
  form1.Memo1.Text := form1.idHttp1.Post('http://piccy.info/ru/upload/', post);

  post.Free;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
opendialog1.Execute();
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
post;
end;

procedure TForm1.OpenDialog1SelectionChange(Sender: TObject);
begin
edit1.Text := opendialog1.FileName;
end;

end.
Как то так :agy: Это код формы. Файл зальётся на piccy.info и результат с ссылками появится в memo1. Интеграцию в контекстное меню гугли :agy: . Исходник в аттаче (delphi 2009) :agy: :agy: :agy:
 

Вложения

Последнее редактирование:

qpAHToMAS

Administrator
Команда форума
Администратор
22.10.2006
9 323
33
  • Золотая медаль 215
  • Золотая медаль 152
  • Серебряная медаль 136
  • Золотая медаль 221
Собственно GUI представляю таким:


По началу доступны только меню с выбором хостинга и обзор для выбора изображения.
По выбору хостинга меняется "File info", а точнее, в скобочки вписываются допустимые параметры изображения: формат, вес, разрешение.
По выбору файла изображения для загрузки опять меняется "File info", но на этот раз дописываются параметры выбранной картинки, каждый параметр проверяется, если он подходит под хостинг, то: ставятся галочки и загорается кнопка Upload.
По нажатию на Upload кнопка переименовывается в Abort, по процессу загрузки файла бежит шкала, когда загрузка завершена — появляется новое окошко, в котором будет сообщено о том, что файл загружен, ну и конечно же там будут различные коды с этой картинкой, в первую очередь директ-линк, потом BBCODE, HTTP и другие.

Так же хотелось бы реализовать DRAG & DROP функцию, т.е. возможность перетаскивания файла изображения прямо на окно программы, по перетаскиванию его адрес будет вписан в форму Image.

Еще было бы хорошо сделать возможность ввода URL изображения в форму Image, по обнаружению "http://" в начале адреса будет выполнятся код загрузки изображения на хостинг через URL, если конечно хостинг это поддерживает. На счет этого еще думаю, может не надо?

После установки программы изменяется контекстное меню для файлов формата jpg, jpeg, png, gif. Таким образом можно будет нажать пр. кн. мыши по файл и выбрать его загрузку — запустится программа, в ней уже будет введен адрес картинки в поле Image.

Так же немало важно будет сделать запоминание последнего выбранного хостинга в списке, что бы пользователю по каждому запуску программы не выбирать в меню нужным ему хостинг.

Ну, а теперь вопрос: как все это заставить работать? :(
 
Последнее редактирование:

TwisteR

VIP
VIP
24.07.2006
4 045
  • Серебряная медаль 311
  • Золотая медаль 115
  • Серебряная медаль 215
Вот, наконец то освободился под вечер, написал простенький Qt-класс для постинга картинок на piccy.info (imageshack напостой выдавал Zero-sized reply, может там защита какая то от заливок извне, я не вникал). Для демонстрации работы класса был написан элементарный ГУЙ (в архиве — проект QtCreator'а).

Целью проекта было подать пример программирования на Qt, а не реализация всех наполеоновских планов из поста выше :D.

2 qpAHToMAS:
Остальное дупли сам, это не так сложно, как может показаться на первый взгляд (серьёзно).

Я довольно быстро научился мыслить по куте'шному принципу "Всё — классы" :). Справка у них отличная :drink:. Стоит сказать, что ещё пару часов назад я и не подозревал о существовании половины использованных мною тут классов. И читал только встроенную документацию из Assistant'а :)

Код подробно комментирован. Если что то не понятно — спрашивайте тут :)
 

Вложения

Последнее редактирование:

qpAHToMAS

Administrator
Команда форума
Администратор
22.10.2006
9 323
33
  • Золотая медаль 215
  • Золотая медаль 152
  • Серебряная медаль 136
  • Золотая медаль 221
Спасибо, посмотрю.
Но вот проблема, не компилицо на WinXP :), точнее после компила промилькивает cmd окошко :(.

Compile Output:
Код:
Running build steps for project piccy_uploader...
Creating gdb macros library...
Starting: C:/Qt/2009.01/qt/bin/qmake.exe D:/C++/piccy_uploader/piccy_uploader.pro -spec win32-g++ -r CONFIG+=debug_and_release 
Exited with code 0.
Starting: C:/Qt/2009.01/mingw/bin/mingw32-make.exe debug -w 
mingw32-make: Entering directory `D:/C++/piccy_uploader'
C:/Qt/2009.01/mingw/bin/mingw32-make -f Makefile.Debug
mingw32-make[1]: Entering directory `D:/C++/piccy_uploader'
c:\Qt\2009.01\qt\bin\uic.exe mainwindow.ui -o ui_mainwindow.h
g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"c:\Qt\2009.01\qt\include\QtCore" -I"c:\Qt\2009.01\qt\include\QtNetwork" -I"c:\Qt\2009.01\qt\include\QtGui" -I"c:\Qt\2009.01\qt\include" -I"c:\Qt\2009.01\qt\include\ActiveQt" -I"debug" -I"." -I"c:\Qt\2009.01\qt\mkspecs\win32-g++" -o debug\main.o main.cpp
g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"c:\Qt\2009.01\qt\include\QtCore" -I"c:\Qt\2009.01\qt\include\QtNetwork" -I"c:\Qt\2009.01\qt\include\QtGui" -I"c:\Qt\2009.01\qt\include" -I"c:\Qt\2009.01\qt\include\ActiveQt" -I"debug" -I"." -I"c:\Qt\2009.01\qt\mkspecs\win32-g++" -o debug\mainwindow.o mainwindow.cpp
g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"c:\Qt\2009.01\qt\include\QtCore" -I"c:\Qt\2009.01\qt\include\QtNetwork" -I"c:\Qt\2009.01\qt\include\QtGui" -I"c:\Qt\2009.01\qt\include" -I"c:\Qt\2009.01\qt\include\ActiveQt" -I"debug" -I"." -I"c:\Qt\2009.01\qt\mkspecs\win32-g++" -o debug\piccy_uploader.o piccy_uploader.cpp
c:/Qt/2009.01/qt/bin\moc.exe -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"c:\Qt\2009.01\qt\include\QtCore" -I"c:\Qt\2009.01\qt\include\QtNetwork" -I"c:\Qt\2009.01\qt\include\QtGui" -I"c:\Qt\2009.01\qt\include" -I"c:\Qt\2009.01\qt\include\ActiveQt" -I"debug" -I"." -I"c:\Qt\2009.01\qt\mkspecs\win32-g++" -D__GNUC__ -DWIN32 mainwindow.h -o debug\moc_mainwindow.cpp
g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"c:\Qt\2009.01\qt\include\QtCore" -I"c:\Qt\2009.01\qt\include\QtNetwork" -I"c:\Qt\2009.01\qt\include\QtGui" -I"c:\Qt\2009.01\qt\include" -I"c:\Qt\2009.01\qt\include\ActiveQt" -I"debug" -I"." -I"c:\Qt\2009.01\qt\mkspecs\win32-g++" -o debug\moc_mainwindow.o debug\moc_mainwindow.cpp
c:/Qt/2009.01/qt/bin\moc.exe -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"c:\Qt\2009.01\qt\include\QtCore" -I"c:\Qt\2009.01\qt\include\QtNetwork" -I"c:\Qt\2009.01\qt\include\QtGui" -I"c:\Qt\2009.01\qt\include" -I"c:\Qt\2009.01\qt\include\ActiveQt" -I"debug" -I"." -I"c:\Qt\2009.01\qt\mkspecs\win32-g++" -D__GNUC__ -DWIN32 piccy_uploader.h -o debug\moc_piccy_uploader.cpp
g++ -c -g -frtti -fexceptions -mthreads -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"c:\Qt\2009.01\qt\include\QtCore" -I"c:\Qt\2009.01\qt\include\QtNetwork" -I"c:\Qt\2009.01\qt\include\QtGui" -I"c:\Qt\2009.01\qt\include" -I"c:\Qt\2009.01\qt\include\ActiveQt" -I"debug" -I"." -I"c:\Qt\2009.01\qt\mkspecs\win32-g++" -o debug\moc_piccy_uploader.o debug\moc_piccy_uploader.cpp
g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -mthreads -Wl -Wl,-subsystem,windows -o debug\piccy_uploader.exe debug/main.o debug/mainwindow.o debug/piccy_uploader.o debug/moc_mainwindow.o debug/moc_piccy_uploader.o  -L"c:\Qt\2009.01\qt\lib" -lmingw32 -lqtmaind -lQtGuid4 -lQtNetworkd4 -lQtCored4
mingw32-make[1]: Leaving directory `D:/C++/piccy_uploader'
mingw32-make: Leaving directory `D:/C++/piccy_uploader'
Exited with code 0.
Application Output:
Код:
Starting ...
exited with code 0
 

ka3a4ok

царь иудейский
28.02.2009
420
TwisteR сказал(а):
(imageshack напостой выдавал Zero-sized reply, может там защита какая то от заливок извне, я не вникал).
Реферер imageshack не проверяет, может смотрит есть ли хедеры юсерагента. На PHP я могу поддерлать. Вобщем смотри сам как получится.
 

Game Server

Доноры Красавчики

Пользователи онлайн

Нет пользователей онлайн.