My.deviantart api

Description

Voilà une class PHP5 utilisant l'extension DOM pour parser votre compte deviant
art et renvoyer toutes les infos nécessaires (avatar, id, gallerie, deviation).
Rien de bien compliqué mais cela rends bien des services.

Fonctionnement trés simple, je considère qu'une page retournée par deviantart
est un arbre DOM, qu'il suffira de parser avec des requêtes Xpath pour en
extraire les informations que l'on souhaite. Plus précisément pour l'application
chaque page ouaib est un objet DOMNode (c'est ce que font toutes les classes
dont le nom commence par dom). Nous pouvons donc requêter ces objets avec des
requêtes XPATH (toutes les classes commancant par deviant).

Chaque résultat de requête est stocké dans deux attributs de classes.

L'attribut NodeList est un objet ... NodeList. C'est cet objet que nous allons
itérer pour trouver toutes les déviations contenues dans le code HTML.

Un second attribut splObjectStorage est un objet splObjectStorage. Qui contient
l'ensemble des objets Deviation trouvés dans une gallerie. Le pourquoi du comment
d'un splObjectStorage plutôt qu'un array :

http://technosophos.com/content/set-objects-php-arrays-vs-splobjectstorage

Averaging this over multiple runs, SplObjectStorage executed both fill and check
functions twice as fast as the array method presented above. We tried various
permutations of the tests above.

Finalement il suffira d'itérer notre splObjectStorage est d'appliquer un callback
sur chaque objet déviation pour l'afficher.

Il est bien sûr possible de configurer l'affichage en étandant la classe display.
Il y a un exemple un peu plus bas.

! Mise en garde !
J'ai lu la charte d'utilisation et cette classe n'as pas l'air de rentrer en
conflit avec, donc si des anglophones (avertis) pouvaient me confirmer.

Par contre vous DEVEZ utiliser cette class uniquement avec VOTRE COMPTE
deviantart, je n'ai pas écrit cette API dans l'idée de piller le travail des
autres. VOUS êtes responsable de ce que vous faites !

Protips, mettez en CACHE tout ce que vous allez récupèrer, les images et les
pages HTML. Deviantart se réserve le droit de BANNIR des IP si ils considèrent
(à tort ou à raison) qu'il y a une utilisation frauduleuse du service.

Pour les curieux l'API est disponible sous forme d'archive phar (voir make.php).

N'oubliez pas la dernière version se trouve sur github :
https://github.com/inwebo/My.DeviantArtParser

Source / Exemple :


<?php
/**

  • My.Deviant API
*
  • LICENCE
*
  • Vous êtes libre de :
*
  • Partager : reproduire, distribuer et communiquer l'oeuvre
  • Remixer : adapter l'oeuvre
*
  • Selon les conditions suivantes :
*
  • Attribution : Vous devez attribuer l'oeuvre de la manière indiquée par
  • l'auteur de l'oeuvre ou le titulaire des droits (mais pas d'une manière
  • qui suggérerait qu'ils vous soutiennent ou approuvent votre utilisation
  • de l'oeuvre).
*
  • Pas d&#8217;Utilisation Commerciale : Vous n'avez pas le droit d'utiliser cette
  • oeuvre à des fins commerciales.
*
  • Partage à l'Identique : Si vous modifiez, transformez ou adaptez cette
  • oeuvre, vous n'avez le droit de distribuer votre création que sous une
  • licence identique ou similaire à celle-ci.
*
  • Remarque : A chaque réutilisation ou distribution de cette oeuvre, vous
  • devez faire apparaître clairement au public la licence selon laquelle elle
  • est mise à disposition. La meilleure manière de l'indiquer est un lien vers
  • cette page web.
*
  • /
/**
  • Query a DOMDocument searching for all newest deviations.
* *
  • /
class DeviantParser extends DOMXPath { /**
  • Init Xpath
*
  • @param DOMDocument $doc
  • @return void
  • /
public function __construct( DOMDocument $doc ) { parent::__construct( $doc ); } /**
  • Iterate a DOMNodeList and for each node call a callback function
*
  • @param DOMDocument $doc
  • @return SplObjectStorage
  • /
public function iterate( DOMNodeList $nodelist, $callback ) { $SplObjectStorage = new SplObjectStorage(); foreach( $nodelist as $item ) { $SplObjectStorage->attach( call_user_func( $callback, $item ) ); } return $SplObjectStorage; } /**
  • Set default nodeValue to NULL if item doesn't have got a nodeValue
*
  • @param DOMNodeList $nodeList to iterate
  • @param int $index
  • @return string if nodeValue is set else NULL
  • /
public function setDefault( DOMNodeList $nodeList, $index ) { if( @($nodeList->item($index)) ) { return $nodeList->item($index)->nodeValue; } else { return NULL; } } /**
  • Make deviation object from a DOMNode
*
  • @param DOMNode $node a deviation't DOMNode
  • @return object Daviation
  • /
public static function factoryDeviation( DOMNode $node ) { return new Deviation( $node ); } /**
  • Make gallery object from a DOMNode
*
  • @param DOMNode $node a deviation't DOMNode
  • @return object stdClass $gallerie
  • /
public static function factoryGallery( DOMNode $node ) { $gallerie = new stdClass(); $gallerie->url = $node->attributes->getNamedItem("href")->nodeValue; $gallerie->name = $node->nodeValue; return $gallerie; } /**
  • Convert a SplObjectStorage to array
* public static function toArray( SplObjectStorage $collection ) { $buffer = array(); $collection->rewind(); while( $collection->valid() ) { $buffer[] = get_object_vars( $collection->current() ); $collection->next(); } return $buffer; } }

Conclusion :


Fork me i'm famous :
https://github.com/inwebo/My.DeviantArtParser

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.