Jonas Meyer
Mitglied
Hallo,
ich habe ein kleines Programm erstellt wo ich ein Browsergame(travian.de) ein bisschen einlese also mich einlogge und dann Werte auslese leider komm ich nicht weiter und zwar möchte ich eine neue Url öffnen und dann bin ich nicht mehr eingeloggt. Die Cookies habe ich an glaub ich zu mindestens.
Der Code:
ich habe ein kleines Programm erstellt wo ich ein Browsergame(travian.de) ein bisschen einlese also mich einlogge und dann Werte auslese leider komm ich nicht weiter und zwar möchte ich eine neue Url öffnen und dann bin ich nicht mehr eingeloggt. Die Cookies habe ich an glaub ich zu mindestens.
Der Code:
C++:
#include <string>
#include <iostream>
#include <fstream>
#include <curl.h>
using namespace std;
static char errorBuffer[CURL_ERROR_SIZE];
static string buffer;
void Build(int id);
void StundeProdie(static string buffer);
void EinheitenAusgabe(static string buffer);
void AusgabeRohstofffelder(static string buffer);
static int writer(char *data, size_t size, size_t nmemb, string *buffer)
{
int result = 0;
if (buffer != NULL)
{
buffer->append(data, size * nmemb);
result = size * nmemb;
}
return result;
}
CURL *curl;
CURLcode result;
int main(int argc, char* argv[])
{
string useragent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:16.0) Gecko/20100101 Firefox/16.0";
curl = curl_easy_init();
if (curl)
{
// Config
curl_easy_setopt(curl, CURLOPT_URL, "http://ts2.travian.de/dorf1.php");
curl_easy_setopt(curl, CURLOPT_USERAGENT,useragent.c_str());
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "name=NAME&password=PASSWORT&s1=Einloggen&w=1366%3A768&login=1352499815");
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writer);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &buffer);
curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, errorBuffer);
curl_easy_setopt(curl, CURLOPT_AUTOREFERER, 1 );
curl_easy_setopt(curl, CURLOPT_REFERER, "http://ts2.travian.de/");
curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "" );
curl_easy_setopt(curl, CURLOPT_COOKIEJAR, "" );
result = curl_easy_perform(curl);
if (result == CURLE_OK)
{
fstream datei;
datei.open("travTest.html", ios::out);
datei << buffer << endl;
datei.close();
}
EinheitenAusgabe(buffer);
StundeProdie(buffer);
AusgabeRohstofffelder(buffer);
Build(1);
}
curl_easy_cleanup(curl);
system("PAUSE");
return 0;
}
void AusgabeRohstofffelder(static string buffer){
int begin = 0;
int exit = 0;
int anfang = 0;
int ende = 0;
int length = 0;
char ausgabe[128];
begin = buffer.find("class=\"village1\"><map name=\"rx\"");
exit = buffer.find("</map>", begin);
ende = begin;
for(int i = 0; i < 18; i++){
anfang = buffer.find("alt=\"", ende);
ende = buffer.find("\"/>",anfang);
length = buffer.copy(ausgabe, (ende - (anfang+5)), anfang+5);
ausgabe[length] = '\0';
cout << ausgabe << endl;
}
}
void Build(int id){
CURL *curl;
CURLcode result;
string buffer2;
string useragent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:16.0) Gecko/20100101 Firefox/16.0";
curl = curl_easy_init();
if (curl)
{
char urladresse[256] = "http://ts2.travian.de/build.php?id=1";
curl_easy_setopt(curl, CURLOPT_URL, urladresse);
curl_easy_setopt(curl, CURLOPT_USERAGENT,useragent.c_str());
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writer);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &buffer2);
curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, errorBuffer);
curl_easy_setopt(curl, CURLOPT_REFERER, "http://ts2.travian.de/dorf1.php");
curl_easy_setopt(curl, CURLOPT_AUTOREFERER, 1 );
curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "");
curl_easy_setopt(curl, CURLOPT_COOKIEJAR, "");
result = curl_easy_perform(curl);
if (result == CURLE_OK)
{
fstream datei2;
datei2.open("travTestBau.html", ios::out);
datei2 << buffer2 << endl;
datei2.close();
}else{
cout << "error!" << endl;
}
}
}
void StundeProdie(static string buffer){
int rohstoffe = 0;
int res = 0;
int ende = 0;
int length = 0;
char nameRohstoff[64];
char nameAusgabe[64];
char anzahlRohstoff[30];
rohstoffe = buffer.find("Produktion pro Stunde:");
for(int i = 0; i < 4; i++)
{
res = buffer.find("\"num\">", rohstoffe);
if(res == string::npos)
break;
ende = buffer.find("</td>", res);
if(ende == string::npos)
break;
length = buffer.copy(nameRohstoff, (ende - (res+6)), res+6);
nameRohstoff[length] = '\0';
int j = 0;
int l = 0;
for(; l < 64; l++){
if((nameRohstoff[l] != ' ')&&(nameRohstoff[i] != '\n')){
nameAusgabe[j] = nameRohstoff[l];
j++;
}
}
switch(i){
case 0:
cout << "Holz: ";
break;
case 1:
cout << "Lehm: ";
break;
case 2:
cout << "Eisen: ";
break;
case 3:
cout << "Getreide: ";
break;
default:
cout << "Error in StundeProdie(); " << endl;
break;
}
int Result;
Result = atoi(nameAusgabe);
rohstoffe = ende;
cout << Result << endl;
}
}
void EinheitenAusgabe(static string buffer)
{
int einheiten = 0;
int numEinheitenAnfang = 0;
int numEinheitenEnde = 0;
int naEinheitenAnfang = 0;
int naEinheitenEnde = 0;
int length = 0;
char einheitenAnzahl[26];
char einheitenName[25];
einheiten = buffer.find("Einheiten");
while(einheiten != -1)
{
numEinheitenAnfang = buffer.find("\"num\">", einheiten);
if(numEinheitenAnfang == string::npos)
break;
numEinheitenEnde = buffer.find("</td>", numEinheitenAnfang);
//if(numEinheitenEnde == string::npos)
// break;
length = buffer.copy(einheitenAnzahl,(numEinheitenEnde - (numEinheitenAnfang+6)) , numEinheitenAnfang+6);
einheitenAnzahl[length] = '\0';
naEinheitenAnfang = buffer.find("\"un\">", einheiten);
//if(naEinheitenAnfang == string::npos)
// break;
naEinheitenEnde = buffer.find("</td>", naEinheitenAnfang);
//if(naEinheitenEnde == string::npos)
// break;
length = buffer.copy(einheitenName,(naEinheitenEnde - (naEinheitenAnfang+5)) , naEinheitenAnfang+5);
einheitenName[length] = '\0';
cout << einheitenName;
cout << ": " << einheitenAnzahl << endl;
einheiten = naEinheitenEnde;
}
}
Zuletzt bearbeitet von einem Moderator: