[API] Elitepvpers Profil API

04/08/2015 23:39 ~ JWonderpig ~#1
Hallo,
kann sein, das es so eine API hier schon irgendwo gibt, aber dann ich habe sie nicht gefunden...

Mit der API erhaltet ihr eure Profildaten im JSON-Format und könnt diese dann einfach in euer Anwendung nutzen.

index.php
PHP Code:
   
    error_reporting
(0);

    include 
'classes/TBMAPI.php';
    
    if(isset(
$_GET['profile'])) {
        if(
$_GET['profile'] != "") {
                
$p $_GET['profile'];
            
                
$TBMAPI = new TBMAPI($p);
                
                
$DATA = array(
                    
'RegisterDate' => $TBMAPI->getRegDate(),
                    
'Posts'        => $TBMAPI->getPosts(),
                    
'BlogPosts'    => $TBMAPI->getBlogPosts(),
                    
'EliteGold'    => $TBMAPI->getGold(),
                    
'Positive'     => $TBMAPI->getPositiveTBM(),
                    
'Neutral'      => $TBMAPI->getNeutraleTBM(),
                    
'Negative'     => $TBMAPI->getNegativeTBM(),
                    
'Mediations'   => $TBMAPI->getMediations()
                );
                
                
$JSON json_encode($DATA);
                echo 
"<pre>";
                echo 
$JSON;
                echo 
"</pre>";
        }
    } 
TBMAPI.php
PHP Code:

/**
 * @author Caiv
 */
class TBMAPI {
    
    
/**
     * Profillink
     * @var String
     */
    
private $profile;
    
    
    
/**
     * Benötigte Durchläufe für Schleife
     * @var int
     */
    
private $profilelength;
    
    
/**
     * Anzahl der Mediations als String!!!
     * @var String
     */
    
private $mediations;
    
    
/**
     * Positive TBM
     * @var int
     */
    
private $positiveTBM;
    
    
/**
     * Neutrale TBM
     * @var int
     */
    
private $neutraleTBM;
    
    
/**
     * Negative TBM
     * @var int
     */
    
private $negativeTBM;
    
    
/**
     * Anzahl der Blogeintraege
     * @var int
     */
    
private $blog;
    
    
/**
     * Aktueller E*Gold Stand
     * @var int
     */
    
private $elitegold;
    
    
/**
     * Aktueller Beitraege Stand
     * @var String
     */
    
private $beitraege;
    
    
/**
     * Register Datum
     * @var int
     */
    
private $regdate;
    
    
/**
     * Konstruktor benötigt einen Profillink
     * @param String $p
     */
    
public function __construct($p) {
        
$this->profile $p;
        
$this->ParseHTML();
    }
    
    
/**
     * Gibt den Profillink zurück
     * @return String
     */
    
public function getProfile() {
        return 
$this->profile;
    }
    
    
/**
     * Gibt "Länge" des Profils zurück
     * @return int
     */
    
public function getProfilelength() {
        return 
$this->profilelength;
    }
    
    
/**
     * Gibt Positive TBm zurück
     * @return int
     */
    
public function getPositiveTBM() {
        return 
$this->positiveTBM;
    }
    
    
/**
     * Gibt Neutrale TBM zurück
     * @return int
     */
    
public function getNeutraleTBM() {
        return 
$this->neutraleTBM;
    }
    
    
/**
     * Gibt negative TBM zurück
     * @return int
     */
    
public function getNegativeTBM() {
        return 
$this->negativeTBM;
    }
    
    
/**
     * Gibt Mediations zurück
     * @return String
     */
    
public function getMediations() {
        return 
$this->mediations;
    }
    
    
/**
     * Gibt Posts zurück
     * @return String
     */
    
public function getPosts() {
        return 
$this->beitraege;
    }
    
    
/**
     * Gibt Blogeintraege zurück
     * @return int
     */
    
public function getBlogPosts() {
        return 
$this->blog;
    }
    
    
/**
     * Gibt Elitegold zurück
     * @return int
     */
    
public function getGold() {
        return 
$this->elitegold;
    }
    
    
/**
     * Gibt Register Datum zurück
     * @return String
     */
    
public function getRegDate() {
        return 
$this->regdate;
    }
    
    
/**
     * Parsing starten
     */
    
private function ParseHTML() {
        
$items $this->CreatNewXPath($this->CreatNewDOM());
        
$this->CountProfileRows($items);
        
$this->AssignValues($items);
        
$this->ConvertTBM($items);
    }
    
    
/**
     * Gibt HTML zurück
     * @return \DOMDocument
     */
    
private function CreatNewDOM() {
        
libxml_use_internal_errors(TRUE);
        
$dom = new DOMDocument;
        
$dom->loadHTMLFile($this->profile);
        
libxml_clear_errors();
        
        return 
$dom;
    }
    
    
/**
     * Bestimmten Bereich parsen
     * @param DOMDocument $d
     */
    
private function CreatNewXPath(DOMDocument $d) {
        
$xp = new DOMXPath($d);
        
$matches $xp->query('//dl[@class="smallfont list_no_decoration profilefield_list"]//dd');
        
        return 
$matches;
    }
    
    
/**
     * Benötigt die Ergebnisse des Parsings als Parameter
     * @param $items
     */
    
private function CountProfileRows($items) {
        for(
$i=0$i $items->length$i++) {
            
$this->profilelength++;
        }    
    }
    
    
/**
     * Anhand der Profillänge die Werte zuweisen
     */
    
private function AssignValues($items) {
        
$this->mediations $this->RemoveSpaces($items->item($this->profilelength-1)->nodeValue);
        
$this->elitegold  $this->RemoveSpaces($items->item($this->profilelength-3)->nodeValue);
        
$this->blog       $this->RemoveSpaces($items->item($this->profilelength-4)->nodeValue);
        
$this->beitraege  $this->RemoveSpaces($items->item($this->profilelength-5)->nodeValue);
        
$this->regdate    $this->RemoveSpaces($items->item($this->profilelength-6)->nodeValue);
    }
    
    
/**
     * String mit TBM's bearbeiten
     */
    
private function ConvertTBM($items) {
        
$string $items->item($this->profilelength-2)->nodeValue;
        
$TBM explode("/"$string);
        
$this->positiveTBM $TBM[0];
        
$this->neutraleTBM $TBM[1];
        
$this->negativeTBM $TBM[2];
    }
    
    
/**
     * Leerzeichen aus einem String entfernen
     * @return String
     */
    
private function RemoveSpaces($string) {
        return 
str_replace(" """$string);
    }
    

Beispiel:
[Only registered and activated users can see links. Click Here To Register...]

[Only registered and activated users can see links. Click Here To Register...]

04/09/2015 00:44 YatoDev#2
Wenn dein Server zu of auf Epvp connected wird er gesperrt.(nicht permanent)
Gut, nur habe ich dafür keinen verwendungszweck^^
04/09/2015 01:02 ~ JWonderpig ~#3
Quote:
Originally Posted by »FlutterShy™ View Post
Wenn dein Server zu of auf Epvp connected wird er gesperrt.(nicht permanent)
Gut, nur habe ich dafür keinen verwendungszweck^^
ok, werde mal gucken, ob ich dann einfach die Source veröffentliche. ;)
Ist auch für Leute gedacht, die für ihre Website oder so ihr Stats haben wollen ;)
04/09/2015 01:16 YatoDev#4
das wäre nice. trotzdem sollte das nicht in echtzeit geupdatet werden falls man eine viel besuchte seite hat
04/09/2015 19:37 Hurt Locker#5
Quote:
Originally Posted by <(-,..,-)> View Post
[Only registered and activated users can see links. Click Here To Register...]

F5 gedrückt gehalten und dein Server ist Blockiert.
Passiert das zu oft hast du ne dauerhafte Blockade, hatte ich mit meinem damaligen e*Gold Rechner auch.
:facepalm:

Jemand will etwas teilen und andere machen es einfach sofort kaputt weil sie mit ihrem Leben nicht klar kommen oder wieso auch immer.
04/09/2015 19:39 Devsome#6
Quote:
Originally Posted by Todbringer View Post
Bitte dich wenn du hier schon auf 1337 machst dann benutz wenigstens ein Script oder so dafür.
:c F5 reicht in diesem Fall, wieso ein mehraufwand machen ?
04/09/2015 21:26 ~ JWonderpig ~#7
So, hab die Source mal veöffentlicht. Könnt euch ja selber ne Lösung dafür überlegen.
Evtl. Proxies oder so :p
04/10/2015 10:33 Shawak#8
Proxies ist doch keine Lösung, das einzige sinnvolle ist es, die Profile im Cache zu speichern.
04/10/2015 11:57 MrDami123#9
Oder in einer Datenbank.
04/10/2015 11:59 ~ JWonderpig ~#10
Wie gesagt, könnt ihr euch überlegen ;)

Quote:
Originally Posted by Shawak View Post
Proxies ist doch keine Lösung, das einzige sinnvolle ist es, die Profile im Cache zu speichern.
Danke für den Tipp, komme nicht oft in den Gebrauch von Proxies.
06/14/2015 23:40 NoTeefy#11
Wie sind denn da eigentlich die Raten? Habe dazu nirgendwo was gefunden. Sprich: Wie oft darf der Server eine Anfrage senden?


Freundliche Grüsse
06/15/2015 13:06 YatoDev#12
teste es aus
06/15/2015 16:22 Else#13
Quote:
Originally Posted by ˹№ɫᴇᴇբץ˼ View Post
Wie sind denn da eigentlich die Raten? Habe dazu nirgendwo was gefunden. Sprich: Wie oft darf der Server eine Anfrage senden?


Freundliche Grüsse
Mit einer Endlosschleife - ein mitzählen wäre angebracht, bis zum ungültigen Ergebnis.
06/15/2015 16:38 Serraniel#14
Austesten über Server würde ich nicht empfehlen. Da kann es passieren das die IP dauerhaft blockiert ist!
06/15/2015 16:52 IchVerabschiedeMich#15
Quote:
Originally Posted by Else View Post
Mit einer Endlosschleife - ein mitzählen wäre angebracht, bis zum ungültigen Ergebnis.
Und wie berechnest du das ganze mit dem Burst etc?
Bspw. kann man bei Nginx die r/s Limitieren, und zusätzlich einen Burst angeben.