Мы сделали это на многих настроенных нами веб-сервисах, и скоро сделаем это и для Sharepoint. Как вы говорите, вы можете получить данные в формате XML. Так что вам просто нужно
1) Получить данные XML
2) Разобрать данные XML
3) Вернуть теперь читаемые данные в блоке в Drupal
Для 1 вам необходимо открыть любой доступ через брандмауэр и предоставить общедоступный XML-канал или установить его доступным только по IP-адресу сервера Drupal или некоторому другому механизму аутентификации.
Для 2PHP дает вам много вариантов, как анализировать XML. Мы создали один модуль для обработки службы XML, а затем вызываем его из другого модуля, который обрабатывает отображение, тему и т. Д. Ниже я приведу сначала пример двух функций из модуля XML, а затем пример того, как вы может использовать его в другом модуле.
Вот из модуля 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;
}
Тогда просто напишите свой код, чтобы создать блок. Если вы не знаете, как это сделать, посмотрите http://www.nowarninglabel.com/home/creating-a-new-custom-module-in-drupal-6, который создает простой блок. Затем для содержимого вы можете просто вызвать одну из вышеуказанных функций в XML-документе, например, $ content = xml_service_parse ('http://sharepoint.example.com/some/thing/feed.xml');
Если вы хотите выполнить синтаксический анализ узла, вы можете просто использовать функцию XML, но вместо этого использовать node_save () для программного создания узла: http://api.drupal.org/api/function/node_save
Я еще не слишком много смотрел на доступные службы Sharepoint, но вы могли бы просто проанализировать XML в dom-документе, как показано выше, а затем выполнить цикл, создавая узел для каждого XML-узла, который соответствует вашим критериям.
И если вы хотите больше работы, проделанной для
Надеюсь, это было полезно. Не стесняйтесь спрашивать более подробно.