Nous l'avons fait sur de nombreux services Web que nous avons mis en place, et le ferons bientôt aussi pour Sharepoint. Comme vous le dites, vous pouvez obtenir les données en XML.Donc, il vous suffit de 1) Récupérer les données XML 2) analyser les données XML 3) renvoient les données maintenant lisibles dans un bloc dans Drupal
Pour 1 vous avez besoin d'ouvrir un accès pare-feu et de fournir un public lisible Flux XML ou définissez-le uniquement accessible par l'adresse IP du serveur Drupal ou un autre mécanisme d'authentification. Pour 2PHP vous donne beaucoup d'options sur la façon d'analyser le XML. Nous avons créé un module pour gérer le service XML, puis nous l'appelons d'un autre module qui gère l'affichage, le thème, etc. Ci-dessous, je vais fournir un exemple de deux fonctions du module XML, puis un exemple de comment vous pourrait l'utiliser dans un autre module.
Voici le module XML.
/**
* Retrieving XML data from the URL
*
* @param $url
* The url to retrieve the data
* @param $replace_special_characters
* Replace special character to HTML format
*
* @return parse result as struct
*/
function xmlservice_parse($url, $replace_special_characters = FALSE) {
$http_contents = drupal_http_request($url);
if (!isset($http_contents->data)) {
throw new RuntimeException("Cannot get contents from the URL");
}//if
if($replace_special_characters)
$http_contents_data = str_replace('&','&', $http_contents->data);
else
$http_contents_data = $http_contents->data;
$xml_parser = xml_parser_create();
xml_parse_into_struct($xml_parser, $http_contents_data, $result);
xml_parser_free($xml_parser);
return $result;
}
/**
* Retrieving XML data as Dom document from the URL
*
* @param $url
* The url to retrieve the data
* @param $replace_special_characters
* Replace special character to HTML format
*
* @return result as Dom Document
*/
function xmlservice_parse_to_dom($url, $replace_special_characters = FALSE) {
$http_contents = drupal_http_request($url);
if (isset($http_contents->error)) {
throw new RuntimeException($http_contents->error);
}//if
if (!isset($http_contents->data)) {
throw new RuntimeException("Cannot get contents from the URL");
}//if
if($replace_special_characters){
$http_contents_data = str_replace('&','&', $http_contents->data);
}//if
else{
$http_contents_data = $http_contents->data;
}//else
$dom_document = new DomDocument;
/* load htmlinto object */
$dom_document->loadXML($http_contents_data);
/* discard white space */
$dom_document->preserveWhiteSpace = false;
return $dom_document;
}
Ensuite, il suffit d'écrire votre code pour créer un bloc. Si vous ne savez pas comment faire cela, consultez http://www.nowarninglabel.com/home/creating-a-new-custom-module-in-drupal-6 qui crée un bloc simple. Ensuite, pour le contenu, vous pouvez simplement appeler l'une des fonctions ci-dessus sur un document XML, par exemple $ content = xml_service_parse ('http://sharepoint.example.com/some/thing/feed.xml');
Si vous voulez analyser dans un nœud, vous pouvez simplement utiliser la fonction XML, mais plutôt utiliser node_save() pour créer par programme un nœud: http://api.drupal.org/api/function/node_save Je ne l'ai pas regardé trop les services de Sharepoint encore disponibles, mais vous pourrait probablement juste analyser le XML dans un document dom comme montré ci-dessus et ensuite faire une boucle à travers elle en créant un nœud pour chaque nœud XML qui correspond à vos critères.
Et si vous voulez plus du travail accompli pour
espoir qui a été utile. N'hésitez pas à demander plus de détails.
Bonne suggestion. J'ai essayé la version améliorée de FeedAPI (juste appelé Feeds), et c'est presque exactement ce que je cherchais. Le seul problème est que j'en ai besoin pour analyser un flux XML. Il gère RSS/Atom et CSV, mais pas XML. Si vous (ou n'importe qui) connaissez un moyen de l'obtenir pour créer des noeuds à partir d'un XML, cela m'aiderait beaucoup. Merci beaucoup de toute façon. /Anders – andersandersson666
@ andersandersson666: Les flux RSS et ATOM sont déjà XML, donc vous ne cherchez pas un moyen de créer des noeuds 'à partir de XML en général', mais plutôt de créer des noeuds à partir du XML selon le schéma de votre sortie Webservice '. C'est ce que mon dernier paragraphe vise - vous pouvez soit essayer de configurer votre serveur sharepoint pour offrir le contenu dans un format que FeedAPI comprend, ou vous devrez implémenter un plugin d'analyseur personnalisé pour le module FeedAPI qui 'comprend/traduit le XML actuellement offert par votre Webservice. –