HX3 Foren  

  HX3 Foren > Konstruktiv > Software- und Webentwicklung

Software- und Webentwicklung Planung, Programmierung und Administration
UML, JavaScript/DOM, ASP, JSP, PHP, Apache, MySQL, Python, Perl (...)

Antwort
 
Themen-Optionen Ansicht
Alt 02.03.2013, 21:47   #1 (permalink)
50 Beiträge100 Beiträge
 
Benutzerbild von Stolze
 
Registriert seit: 08.01.2008
Ort: Karlsruhe
Alter: 27
Beiträge: 202
Stolze eine Nachricht über ICQ schicken
Standard Automatisch Tabellen Updaten

Hi zusammen,

ich wollte mal fragen ob es möglich wäre eine Tabelle auf den Neusten stand zu halten ohne sie Manuell um zu schreiben. es handelt sich um die Rechte Tabelle hier :: News
Man kann bei EA sich einloggen und den Punktestand und den Tabellenstand nachgucken von der Online Liga unter dieser Seite EA SPORTS | Madden Connected Careers

Ich weiß so viel das auf dieser Seite jedes Team eine ID hat hier ein b.s.
Code:
<td class="changeTeam titans" data-team-id="1400373283" data-crest="titans" data-hometown="Tennessee" data-team-persona="" data-team-seed="1st In AFC South" data-team-record="(1 - 0 - 0)" data-name="TITANS" rowspan="1" colspan="1">
Und das hier ist der Code von meiner Seite
Code:
 <td align="right" width="10"><strong>1</strong></td>
    
    <td align="center" width="20"><img src="http://www.bonee.de/liga_script/lmo/img/teams/small/Buffalo%20Bills.gif" alt="" border="0" height="15" width="15"> </td>
    <td width="72"><acronym title="Buffalo Bills">BUF</acronym></td>
    <td align="center" width="20">2<br></td>
    <td align="center" width="20">0</td>
    <td align="center" width="20">0</td>
    
    <td align="right" width="25">38<br></td>
    <td align="right" width="3">:</td>
    <td align="right" width="25">13<br></td>
Kann man das irgendwie machen ? wenn ja wie würde das gehen ? ich kenne eine Seite die das hinbekommen hat die mir darüber aber keine Auskunft geben will.

Gruß Stolze
__________________
"Vielleicht bin ich auch einfach zu alt und denke daher, dass ein sozialerer Umgang möglich ist. Vielleicht muss ich meine Sicht auf diese Welt und die Menschheit noch weiter in den Keller schieben."
- Bj
Stolze ist offline   Mit Zitat antworten
Alt 04.03.2013, 09:49   #2 (permalink)
10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von TeRp
 
Registriert seit: 02.04.2003
Ort: San Francisco
Beiträge: 1.919
Standard

PHP ? Wikipedia
__________________

TeRp ist offline   Mit Zitat antworten
Alt 11.03.2013, 02:53   #3 (permalink)
Administrator 10 Jahre hx3
5000 Beiträge
 
Benutzerbild von Atomic
 
Registriert seit: 21.02.2003
Ort: Freiburg im Breisgau
Alter: 32
Beiträge: 5.139
Atomic eine Nachricht über ICQ schicken Atomic eine Nachricht über Skype™ schicken
Standard

Was du benötigst ist ein richtiger Linux Rootserver (vServer geht auch, Hauptsache volle Administrationsrechte).

Was man dann tut ist, ein Script schreiben, dass sich auf der EA Seite mit deinen Daten einloggt (praktisch so als würdest du das selber machen) um dort die entsprechenden Daten auszulesen, um diese dann auf deinem Rootserver abzuspeichern.(siehe *)

(Das Script könnte selbst direkt eine Html-Seite erzeugen, oder kann es in einer Datenbank oder Textdatei ablegen, welche dann von der Website bei jedem Seitenaufruf abgefragt/eingelesen wird.)

Dieses Script legst du auf deinem Rootserver in das Verzeichnis /etc/cron.hourly
Der Rootserver wird nun dieses Script stündlich ausführen.

Was du folglich benötigst sind genau drei Dinge:
1.) Rootserver (darf auch ein vServer sein)
2.) Einfache Linux-Kommandozeile Kenntnisse (einloggen, verzeichnisse springen, dateien anlegen, rechte vergeben, usw.)
3.) Kenntnisse in einer Programmiersprache, z.B. Perl, PHP, Java oder Python

Und nun eine kleine Erleuterung wie dieses maschinelle Einloggen funktioniert:
Was dein Script machst, ist nichts anderes, als so zu tun als wäre es ein normaler Webbrowser. Sprich dein Script schickt dem EA-Server bei jedem Seitenaufruf brav die Cookies mit, die der EA-Server dir so schickt. Du liest die Hidden-Input-Felder auf der Login-Seite aus und schickst via HTTP-POST-Request brav die Werte der Hidden-Input-Felder inkl. deinen Login-Daten an den Server... usw. Dein Script tut nichts anderes als was dein Browser tut wenn du dich auf der EA-Seite einloggst.

So funktioniert das.
Schwierig wirds nur bei Captchas. Die sind schlieslich dazu dar genau dieses maschinelle Auslesen zu ... naja sagen wir mal erschweren.
__________________
http://webagentur-walde.de/
Atomic ist offline   Mit Zitat antworten
Alt 11.03.2013, 06:22   #4 (permalink)
50 Beiträge100 Beiträge
 
Benutzerbild von Stolze
 
Registriert seit: 08.01.2008
Ort: Karlsruhe
Alter: 27
Beiträge: 202
Stolze eine Nachricht über ICQ schicken
Standard

Danke für die Antwort werde mal gucken in wie fern ich das Realsieren kann ^^
__________________
"Vielleicht bin ich auch einfach zu alt und denke daher, dass ein sozialerer Umgang möglich ist. Vielleicht muss ich meine Sicht auf diese Welt und die Menschheit noch weiter in den Keller schieben."
- Bj
Stolze ist offline   Mit Zitat antworten
Alt 12.03.2013, 01:41   #5 (permalink)
Administrator 10 Jahre hx3
5000 Beiträge
 
Benutzerbild von Atomic
 
Registriert seit: 21.02.2003
Ort: Freiburg im Breisgau
Alter: 32
Beiträge: 5.139
Atomic eine Nachricht über ICQ schicken Atomic eine Nachricht über Skype™ schicken
Standard

Als Inspiration eine Helferklasse.

Benutzt:
PHP: Anforderungen - Manual

Funktionsweise:

Über setHttpAuthUsername und setHttpAuthPassword kannst du HTTP-Authentifizierung ? Wikipedia (Vorsicht: Das hat nichts mit dem Login auf der EA-Seite zu tun.) realisieren. Aber das benötigst du in deinem Fall nicht.

Über walkGET wird ein HTTP-GET-Request ausgeführt während über walkPOST ein HTTP-POST-Request ausgeführt wird.

$url = Adresse
$data = Ein assoziatives Array mit den Daten die du schicken möchtest
$allow_auto_relocation = true bewirkt, das er automatischen Weiterleitungen folgt. ( URL redirection - Wikipedia, the free encyclopedia )

$relocation_matches hab ich mal irgendwo gebraucht. Einfach den Quelltext lesen.

getCookie ist manchmal auch ganz nützlich.


PHP-Code:
<?php

class HttpWebpageWalker {

    private 
$cookies$username$password;

    function 
__construct() {
        
$this->username null;
        
$this->password null;
        
$this->cookies = array();
    }

    final public function 
getCookies() {
        return 
$this->cookies;
    }

    public function 
setHttpAuthUsername($username) {
        
$this->username $username;
    }

    public function 
setHttpAuthPassword($password) {
        
$this->password $password;
    }

    public function 
walkGET($url, array $data = array(), $allow_auto_relocation false, array $relocation_matches = array()) {
        
$result $this->walk(0$url$data$allow_auto_relocation$relocation_matches);
        
$result[1][] = $result[0];
        return 
$result[1];
    }

    public function 
walkPOST($url, array $data = array(), $allow_auto_relocation false, array $relocation_matches = array()) {
        
$result $this->walk(1$url$data$allow_auto_relocation$relocation_matches);
        
$result[1][] = $result[0];
        return 
$result[1];
    }

    private function 
walk($mode$url, array $data = array(), $allow_auto_relocation false, array $relocation_matches = array()) {
        
$match NULL;
        try {
            if (
$mode == 0) {
                
$r = new HttpRequest($urlHttpRequest::METH_GET);
                
$r->setQueryData($data);
            } else {
                
$r = new HttpRequest($urlHttpRequest::METH_POST);
                
$r->setPostFields($data);
            }
            if (isset(
$this->username) AND isset($this->password)) {
                
$r->setOptions(array('httpauth' => $this->username ':' $this->password));
            }
            while (
true) {
                
$this->addCookies($r);
                
$r->send();
                
$this->storeCookies($r);
                switch (
$r->getResponseCode()) {
                    case 
200:
                    case 
500// test
                        
break 2;
                    case 
301:
                    case 
302:
                        
$target_location $r->getResponseHeader("Location");
                        
$found false;
                        foreach (
$relocation_matches as $match_str) {
                            if (
preg_match($match_str$target_location)) {
                                
$match $match_str;
                                break 
3;
                            }
                        }
                        if (!isset(
$match)) {
                            if (
$allow_auto_relocation) {
                                
$r->setUrl($target_location);
                                
$mode HttpRequest::METH_GET;
                            } else {
                                return array(
''NULL'Page tries to relocate to "' $target_location '"');
                            }
                        }
                        break;
                    default:
                        echo 
'Unknown Responce code: ' $r->getResponseCode();
                        
//echo $r->getResponseBody();
                        
return array(''NULL'Unknown Responce code: ' $r->getResponseCode());
                        break;
                }
            }
        } catch (
HttpException $ex) {
            return array(
''NULL'An exception happened: ' $ex);
        }
        return array(
$r, array($r->getResponseBody(), $matchNULL));
    }

    private function 
storeCookies(HttpRequest &$r) {
        
$result = (array) $r->getResponseCookies();
        foreach (
$result as $line) {
            
$line = (array) $line;
            foreach (
$line['cookies'] as $cookiename => $cookievalue) {
                if (
$cookiename == 'Max-Age')
                    continue;
                
$this->cookies[$cookiename] = $cookievalue;
            }
        }
        
//         echo "Cookies got:\n";
        //         print_r($this->cookies);
    
}

    private function 
addCookies(HttpRequest &$r) {
        if (isset(
$this->cookies)) {
            
$r->setCookies($this->cookies);
        }
        
//         echo "Cookies send:\n";
        //         print_r($r->getCookies());
    
}

}
walkGET und walkPOST geben ein Array zurück wobei unter Index 0 der Quelltext zu finden ist.

Um den zu bearbeiten eignet sich reguläre Ausdrücke.

Hier noch eine Hilfsklasse für die Arbeit mit Regulären AUsdrücken unter PHP:
PHP-Code:
<?php

class Match {

    static function 
single($sourcecode$start$end) {
        
$pattern '#' preg_quote($start'#') . '(.*?)' preg_quote($end'#') . '#is';
        return 
self::singleWithPattern($sourcecode$pattern);
    }

    static function 
singleWithPattern($sourcecode$pattern) {
        
$matches = array();
        
preg_match($pattern$sourcecode$matches);
        return 
$matches[1];
    }

    static function 
all($sourcecode$start$end) {
        
$pattern '#' preg_quote($start'#') . '(.*?)' preg_quote($end'#') . '#is';
        return 
self::allWithPattern($sourcecode$pattern);
    }

    static function 
allWithPattern($sourcecode$pattern) {
        
$matches = array();
        
preg_match_all($pattern$sourcecode$matches);
        return 
$matches[1];
    }

}
__________________
http://webagentur-walde.de/
Atomic ist offline   Mit Zitat antworten
Alt 12.03.2013, 01:57   #6 (permalink)
Administrator 10 Jahre hx3
5000 Beiträge
 
Benutzerbild von Atomic
 
Registriert seit: 21.02.2003
Ort: Freiburg im Breisgau
Alter: 32
Beiträge: 5.139
Atomic eine Nachricht über ICQ schicken Atomic eine Nachricht über Skype™ schicken
Standard

Und hier ein Klasse die ich benutzt habe um die Leistungsübersicht an meiner Uni automatisiert herunterzuladen (damit ich nicht ständig nachschaue ob meine Prüfungsergebnisse endlich da sind).

PHP-Code:
<?php

class QIS{
    
    
    private 
$username$password$web$asi;
    
    
    function 
__construct()
    {
        
        
error_reporting(E_ALL);
        
$this->username='verateIchNicht'$this->password='verateIchAuchNicht ;-)';
        
$this->web = new HttpWebpageWalker();
    
        
//$this->login();
    
}
    
    
    private function 
match($sourcecode$start$end)
    {
        
$pattern '#'.preg_quote($start'#').'(.*?)'.preg_quote($end'#').'#is';
        return 
$this->matchWithPattern($sourcecode$pattern);
    }
    
    
    private function 
matchWithPattern($sourcecode$pattern)
    {
        
$matches = array();
        
preg_match($pattern$sourcecode$matches);
        return 
$matches[1];
    }
    
    
    private function 
matchAll($sourcecode$start$end)
    {
        
$pattern '#'.preg_quote($start'#').'(.*?)'.preg_quote($end'#').'#is';
        return 
$this->matchAllWithPattern($sourcecode$pattern);
    }
    
    
    private function 
matchAllWithPattern($sourcecode$pattern)
    {
        
$matches = array();
        
preg_match_all($pattern$sourcecode$matches);
        return 
$matches[1];
    }
    
    
    function 
login()
    {
        
//echo "Doing QIS login..\n";
        
        
$url "https://www.verwaltung.uni-freiburg.de/lsfserver/rds?state=wlogin&login=in&breadCrumbSource=portal";        
        list(
$sourcecode$match$error) = $this->web->walkGET($url, array(), true);
        if(isset(
$error)) trigger_error($errorE_USER_ERROR);
        
//file_put_contents('logTest1', $sourcecode);

        /*
        print_r($error);
        print_r($match);
        print_r($sourcecode);
        $username = $this->match($sourcecode, '<!-- Benutzername und Passwort -->', '<!-- /Benutzername und Passwort -->');
        $lt = $this->match($sourcecode, 'type="hidden" name="lt" value="', '" id="id_lt" />');
        $service = $this->match($sourcecode, 'type="hidden" name="service" value="', '" id="id_service" />');
        */
        
        
$url 'https://www.verwaltung.uni-freiburg.de/lsfserver/rds?state=user&type=1&category=auth.login&re=last&startpage=portal.vm';
        
$data = array('username'=>$this->username'password'=>$this->password'submit'=>'&nbsp;Ok&nbsp;');
        
        list(
$sourcecode$match$error) = $this->web->walkPOST($url$datatrue);
        
//file_put_contents('logTest2', $sourcecode);
        
if(isset($error)) trigger_error($errorE_USER_ERROR);
        
$newpath $this->match($sourcecode'<meta http-equiv="refresh" content="0;URL=''">');
        
$newpath 'https://www.verwaltung.uni-freiburg.de'.str_replace('&amp;''&'$newpath);
        list(
$sourcecode$match$error) = $this->web->walkGET($newpath, array(), true);
        if(isset(
$error)) trigger_error($errorE_USER_ERROR);
        
//file_put_contents('logTest2.1', $sourcecode);
        
$this->asi $this->match($sourcecode'asi=''"');
        
//echo "Successfully logged in\n";
        
    
}
    
    function 
downloadLeistungsuebersicht($target_path)
    {
        
$url 'https://www.verwaltung.uni-freiburg.de/lsfserver/rds?state=hisreports&status=init&publishid=0&vmfile=no&moduleCall=Selection&moduleCall2=LeistungsuebersichtI&asi='.$this->asi;
        list(
$sourcecode$match$error) = $this->web->walkGET($url, array(), true);
        if(isset(
$error)) trigger_error($errorE_USER_ERROR);
        
//file_put_contents('logTest3', $sourcecode);
        
        
$sourcecode $this->match($sourcecode'<img src="/QIS/images//pruefungsabschnitt.gif" border="0">''</a>');
        
$url $this->match($sourcecode'href="''"');
        
        list(
$sourcecode$match$error) = $this->web->walkGET($url, array(), true);
        if(isset(
$error)) trigger_error($errorE_USER_ERROR);
        
file_put_contents($target_path$sourcecode);
    }
    
    
}

include_once 
'HttpWebpageWalker.php';
__________________
http://webagentur-walde.de/
Atomic ist offline   Mit Zitat antworten
Alt 15.03.2013, 06:05   #7 (permalink)
50 Beiträge100 Beiträge
 
Benutzerbild von Stolze
 
Registriert seit: 08.01.2008
Ort: Karlsruhe
Alter: 27
Beiträge: 202
Stolze eine Nachricht über ICQ schicken
Standard

Vielen Dank für die Hilfe
__________________
"Vielleicht bin ich auch einfach zu alt und denke daher, dass ein sozialerer Umgang möglich ist. Vielleicht muss ich meine Sicht auf diese Welt und die Menschheit noch weiter in den Keller schieben."
- Bj
Stolze ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus


Kontakt - HX3.de - Archiv - Nach oben

Angetrieben durch vBulletin, Entwicklung von Philipp Dörner & Tobias



SEO by vBSEO 3.2.0 ©2008, Crawlability, Inc.

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 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116