Suchanfrage senden und Suchergebnisse zurückerhalten
-
Hallo liebe C plü plü ler ^^
Ich weiß nicht, ob ihr mir helfen könntet?
Ich möchte gerne von einem EDIT Feld aus etwas reinschreiben.
Wenn ich jetzt auf den Button drücken möchte, dann Soll dieses reingeschriebe auf google.de's eigene EDIT-Feld übertragen werden. Automatisch muss dabei auf das Feld "Google-Suche" gedrückt werden.
Siehe Bild Nummer Eins:
http://img532.imageshack.us/img532/7615/problembild1cplusplusde.png
Danach sollen die ersten 3 Suchergebnisse (NUR Überschrift) wieder von google.de auf mein Programm übertragen werden.
Siehe Bild Nummer Zwei:
http://img532.imageshack.us/img532/9770/problembild2cplusplusde.png
Wie realisiere ich dieses Programm am Besten?
Ich benutze zZ Borland 6 auf GUI.
MfG
CiPlüPlü
-
Da muss wohl eine externe library her. Mit Boost::Asio und einem HTTP-Clienten solltest du da richtig bedient sein. Du kannst da sicher etwas mit den HTTP-Befehlen hantieren, aber ich würde einfach den Google-Link generieren und dann eine Anfrage stellen

-
http://www.google.de/accounts/TOS?loc=DE
Insbesondere 4. - :p
-
Eine externe Library also, vielen Dank für die Antwort trotzdem

@EOP:
Pffff ich bin kein DdoS-ler (Kiddie) und verspamme die Seite mit unendliche Anfragen ;o)
/e: Wolltet ihr mir was sagen
?
-
http://www.c-plusplus.net/forum/viewtopic-var-t-is-169861.html
fürs verständnis oder selber machen.http://curl.haxx.se/
eignet sich auch fürs Umsetzen.
-
Ich hoffe, du verstehst mich nicht falsch, aber gebe es nicht etwas viel einfacheres? Ich will nicht quasi das Rad neu erfinden, sondern nur einen einzeiler im HTML Format auf C++ zu bringen.
Dennoc versuche ich es mit dem vorgeschlagene Links, sieht mir sehr kompliziert aus

Wenigstens habe ich es geschafft von C++ aus eine Google anfrage zu stellen und mittels CppWebBrowser diese anzuzeigen (Link + das gesuchte Wort ^^)
Geht es wirklich nicht einfache nur einen einzigen Wert (nämlich die Überschrift) automatisch rauszukopieren und mittels Label-Feld diese auszugeben (Siehe Grafik 2; Post 1)
MfG
-
CiPlüPlü schrieb:
Geht es wirklich nicht einfache nur einen einzigen Wert (nämlich die Überschrift) automatisch rauszukopieren und mittels Label-Feld diese auszugeben
Nicht mit C++. HTTP, HTML, Sockets und "Label-Feld" gibt es dort nicht, zumindest nicht ohne externe Bibliotheken zu bemühen. Was einfacheres als Curl dürfte kaum aufzutreiben sein.
Vielleicht wäre ja eine andere Sprache, zB. Python das bessere Werkzeug dafür?
-
/e:
Wow vielen Dank!
Nachdem ich "curl --ssl www.google.de" als Test eingegeben habe, sehe ich nun den ganzen Quelltext! Vielen Dank!
Nun muss ich noch die Datei auslesen und fertig!!!
Vielen Dank nochmal dafür!
Mfg
-
So nun klappt alles soweit, aber ich habe noch ein kleines Problem:
Wie übergebe ich nun die Charvariable auf system("") ???
Ich habe es zwar so gelöst:
*const char Wert = Edit1->Text.c_str();
aber davor und dahinter gibt er mir immer Assemblerwerte aus.
z.B:
statt C:\txt.txt macht er ³4$C:\txt.txt~'{
Wie löse ich das Problem?
-
Hat google nicht 'ne API dafuer? http://code.google.com/apis/soapsearch/api_faq.html
-
----------------------------
----------------------------
----------------------------
-
Wie, schon erledigt? Naja, wollte auch was posten, hatte dann aber keine Lust weiterzuproggen
Hier der Code, irgendwo ist noch ein Bug:#include <iostream> #include <vector> #include <string> #include <utility> #include <boost/asio.hpp> #include <boost/utility.hpp> #include <boost/scoped_ptr.hpp> #include <boost/thread.hpp> #include <boost/bind.hpp> #include <boost/algorithm/string.hpp> template <typename T> class AsyncHTTPClient : boost::noncopyable { public: AsyncHTTPClient(std::string Host, const std::string &Port = "80"); const std::vector<char> GetWebPageContent() const { return m_Buffer; } private: boost::asio::io_service m_IOService; boost::scoped_ptr<boost::asio::ip::tcp::resolver> m_pResolver; boost::asio::ip::tcp::resolver::query m_Query; boost::asio::ip::tcp::socket m_Socket; std::vector<T> m_Buffer; const std::string m_Host; boost::scoped_ptr<boost::thread> m_pThread; void ResolveSuceeded(const boost::system::error_code &Error, boost::asio::ip::tcp::resolver::iterator it); void ConnectSuceeded(const boost::system::error_code &Error); void ResultOfQuery(const boost::system::error_code& Error, std::size_t bytes_transferred); const std::pair<std::string, std::string> SplitUrl(std::string Url) const; }; template <typename T> AsyncHTTPClient<T>::AsyncHTTPClient(std::string Host, const std::string &Port) : m_IOService(boost::asio::io_service::io_service()), m_pResolver(new boost::asio::ip::tcp::resolver(m_IOService)), m_Query(boost::asio::ip::tcp::resolver::query("www.google.de", Port)), m_Socket(m_IOService), m_Buffer(1500), m_Host(Host) { m_pResolver->async_resolve ( m_Query, boost::bind(&AsyncHTTPClient::ResolveSuceeded, this, _1, _2) ); m_pThread.reset(new boost::thread ( boost::bind(&boost::asio::io_service::run, &m_IOService)) ); } template <typename T> void AsyncHTTPClient<T>::ResolveSuceeded(const boost::system::error_code &Error, boost::asio::ip::tcp::resolver::iterator it) { if(Error) { std::cout<<"Error:"<<std::endl; std::cout<< boost::system::system_error(Error).what() <<std::endl; } else { std::cout<<"... Resolve at "<< SplitUrl(m_Host).first <<" suceeded"<<std::endl; m_Socket.async_connect ( *it, boost::bind(&AsyncHTTPClient::ConnectSuceeded, this, _1) ); } } template <typename T> void AsyncHTTPClient<T>::ConnectSuceeded(const boost::system::error_code &Error) { if(Error) { std::cout<<"Error:"<<std::endl; std::cout<< boost::system::system_error(Error).what() <<std::endl; } else { std::cout<<"... Connect to "<< SplitUrl(m_Host).first <<" suceeded"<<std::endl; std::string GET("GET "); GET += SplitUrl(m_Host).second; GET += " Host: www.google.de"; boost::asio::write(m_Socket, boost::asio::buffer(GET)); m_Socket.async_read_some ( boost::asio::buffer(m_Buffer, 1500), boost::bind(&AsyncHTTPClient::ResultOfQuery, this, _1, _2) ); } } template <typename T> void AsyncHTTPClient<T>::ResultOfQuery(const boost::system::error_code& Error, std::size_t bytes_transferred) { if(Error) { std::cout<<"Error:"<<std::endl; std::cout<< boost::system::system_error(Error).what() <<std::endl; } else { std::cout<<"... Successfully connected to DNS-Server"<<std::endl; std::cout<<"... "<< bytes_transferred <<"Bytes transferred"<<std::endl; } } template <typename T> const std::pair<std::string, std::string> AsyncHTTPClient<T>::SplitUrl(std::string Url) const { std::pair<std::string, std::string> UrlPair; UrlPair.second = Url.substr(Url.find(std::string("/"))); Url.erase(Url.find(std::string("/"), (Url.size() - UrlPair.second.size()))); UrlPair.first = Url; return UrlPair; } /// Formal characters not supported class GoogleLinkBuilder : boost::noncopyable { public: const std::string BuildLink(const std::string &Keyword) { std::string Link("www.google.de/search?hl=de&safe=off&q="); Link += Keyword; Link += "&meta=&aq=f&aqi=&aql=&oq=&gs_rfai="; return Link; } }; class GoogleResultParser : boost::noncopyable, public GoogleLinkBuilder { public: GoogleResultParser(const std::string &Keyword); private: boost::scoped_ptr<AsyncHTTPClient<char>> m_pClient; boost::scoped_ptr<boost::thread> m_pThread; bool m_StopLoop; void CheckBuffer(); void ParseResults(const std::vector<char> &Results) const; }; GoogleResultParser::GoogleResultParser(const std::string &Keyword) : m_pClient(new AsyncHTTPClient<char>(BuildLink(Keyword))), m_pThread ( new boost::thread(boost::bind(&GoogleResultParser::CheckBuffer, this)) ), m_StopLoop(false) { } void GoogleResultParser::CheckBuffer() { while(m_StopLoop == false) { if(!m_pClient->GetWebPageContent().empty()) { ParseResults(m_pClient->GetWebPageContent()); m_StopLoop = true; } } } void GoogleResultParser::ParseResults(const std::vector<char> &Results) const { std::cout<<"Results != empty"; for(std::vector<char>::const_iterator it(Results.begin()); it != Results.end(); ++it) std::cout<< *it <<std::endl; } int main() { std::string Keyword; std::cout<<"Keyword: "<<std::endl; std::cin>>Keyword; GoogleResultParser parser(Keyword); }
-
Achja habe den Parser noch nicht weitergemacht. Aber das ist ja das einfachste.
-
Entschuldigung dass ich so voreilig war ^^
Ist das DEV++ Grafisch oder welches Programm?
Der Quellcode sieht geil aus xD
Ich wusste nedd, dass man auch Anfragen (PHP) direkt aus C++ machen kann xD
Wenn ich gestehen kann, soweit bin ich nun doch nicht :p
-
Das hat mit PHP nichts zu tun. Was du machst ist eine Anfrage (HTTP) an den Server senden und der gibt dir dann Antwort. Wie er die Antwort macht (also mit PHP, Ruby usw.) spielt keine Rolle. Theoretisch könnte da sogar ein Typ sitzen, welcher dir auf Anfrage eine neue Seite tippt.

-
CiPlüPlü schrieb:
Entschuldigung dass ich so voreilig war ^^
Äh, wie?

-
Kóyaánasqatsi schrieb:
CiPlüPlü schrieb:
Entschuldigung dass ich so voreilig war ^^
Äh, wie?

Lol das war bezogen auf das Thema, das ich gesagt hatte das sichs erledigt habe. Dem war es eben nicht so und ...
dann sagte ich halt:
Entschuldigung dass ich so voreilig war ^^
MfG
-
Achsou

Kannst du das den noch gebrauchen? Weil sonst landet das gleich im Mülleimer
-
Kóyaánasqatsi schrieb:
Achsou

Kannst du das den noch gebrauchen? Weil sonst landet das gleich im Mülleimer
Ich weiß nicht, mit welchem Programm du es gebastelt hast, weil ich es noch nicht getestet habe, aber lösche den Quellcode trotzdem nicht!
Und ja ich kann es wahrscheinlich gebrauchen ^^
-
CiPlüPlü schrieb:
Ich weiß nicht, mit welchem Programm du es gebastelt hast

Boost^^. Ist kein Programm sondern ne lib. Kannste dir 4free im Netz saugen^^
-
Ach du schande, ich habe nun ein Ordner entpackt, welcher ca. 40.000 Dateien enthält.
Muss ich den ganzen Ordner in meiner C++ bearbeitungsdateien beifügen oder reicht schon ein PATH aus?
Und nochmal zur Erinnerung: Es ist noch aktuell ^^
MfG