Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Скрипты для работы с API Мой мир (mail.ru)
Design And Programming Forum > Сайтострой > Скрипты
X-ray
В общем решил пописать приложения для Mail.ru (может быть даже и сделать интеграцию Вконтакте+Мэйл ру+Однокласники в одину мультисоциальную сеть), почитав мануалов (епать они у них корявые, а в интернете на эту тему ничего не нашел, пришлось все писать с нуля.) выкладываю свои разработки.
Для работы с апи мой мир использую REST API
В настройках сервера register_globals on + должна быть поддержка CURL
Работает как Сервер-Сервер (по словал мэйла типа это самое защищенное), хотя если убрать secure=1, и изменить формулу сигнатуры можно работать как Клиент-Сервер (я сначала делал именно так, особых отличий не заметил).
frends_get.php - скрипт для работы со списком друзей.(вывод информации в массиве, можно использовать JSON или XML конвертирование в массив, при этом массивы отличаются, а должны быть одинаковые, рекомендую использовать JSON, дает наиболее правильный результат, скорее всего проблема с классом конвертации XML надо или переписывать его или искать замену.)
Цитата
<?

parse_str(urldecode($_COOKIE['mrc']));

$url = "http://www.appsmail.ru/platform/api"; //URL API куда будем слать запросы
$appsid="974"; //ID приложения
$private_key="c5e71d1306064235f5359f"; //Приватный ключ
$secret_key="17f499e526e096a9"; //Секректный ключ
$method="friends.get"; //Используемый метод API
$ext="1"; //Формат выдачи 1-полный, 0-только uid
$format="xml"; //Формат выдачи XML или JSON
//secure=1 означает, что данные будут передаваться как Сервер-Сервер
//Расчет параметров для формирования сигнатуры
$params="app_id=".$appsid."ext=".$ext."format=".$format."method=".$method."secure=1session_key=".$session_key."";
//Расчет сигнатуры
$sig = md5($params.$secret_key);

//Формируем функцию для передачи данных методом POST
function post_send ($url,$postdata) {

$ch = curl_init( $url ); //Инициализируем curl
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_ENCODING, "");
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
curl_setopt($ch, CURLOPT_TIMEOUT, 120);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);

$content = curl_exec( $ch );
$err = curl_errno( $ch );
$errmsg = curl_error( $ch );
$header = curl_getinfo( $ch );
curl_close( $ch );

$header['errno'] = $err;
$header['errmsg'] = $errmsg;
$header['content'] = $content;
return $header;
}
//Парсим результаты

// формируем строку с данными
$postdata = "format=".$format."&secure=1&ext=".$ext."&method=".$method."&app_id=".$appsid."&session_key=".$session_key."&sig=".$sig."";
//Отправляем POST запрос
$result = post_send( $url, $postdata );
//Получаем результат
$html = $result['content'];
header('Content-Type: text/html; charset="utf-8"'); //Меняем кодировку на UTF-8

//Выводим массив

// Если использовали XML вывод
if($format="xml")
{
//Преобразуем XML в массив

//Подключаем класс для конвертации XML в массив
require_once "class.xmltoarray.php";

//Создание объекта для нового класса
$xmlObj = new XmlToArray($html);
//Создаем массив
$arrayData = $xmlObj->createArray();
//Выводим

echo "<pre>";
print_r($arrayData);
echo "</pre>";
}
//Если использовали JSON вывод
if($format="json")
{
//Преобразуем JSON в массив

$arrayData = json_decode($html, true);

echo "<pre>";
print_r($arrayData);
echo "</pre>";
}

?>


class.xmltoarray.php - класс для конвертации XML результатов в массив PHP
Цитата
<?
/**
* XMLToArray Generator Class
* @author : MA Razzaque Rupom <rupom_315@yahoo.com>, <rupom.bd@gmail.com>
* Moderator, phpResource (LINK1http://groups.yahoo.com/group/phpresource/LINK1)
* URL: LINK2http://www.rupom.infoLINK2
* @version : 1.0
* @date 06/05/2006
* Purpose : Creating Hierarchical Array from XML Data
* Released : Under GPL
*/

class XmlToArray
{

var $xml='';

/**
* Default Constructor
* @param $xml = xml data
* @return none
*/

function XmlToArray($xml)
{
$this->xml = $xml;
}

/**
* _struct_to_array($values, &$i)
*
* This is adds the contents of the return xml into the array for easier processing.
* Recursive, Static
*
* @access private
* @param array $values this is the xml data in an array
* @param int $i this is the current location in the array
* @return Array
*/

function _struct_to_array($values, &$i)
{
$child = array();
if (isset($values[$i]['value'])) array_push($child, $values[$i]['value']);

while ($i++ < count($values)) {
switch ($values[$i]['type']) {
case 'cdata':
array_push($child, $values[$i]['value']);
break;

case 'complete':
$name = $values[$i]['tag'];
if(!empty($name)){
$child[$name]= ($values[$i]['value'])?($values[$i]['value']):'';
if(isset($values[$i]['attributes'])) {
$child[$name] = $values[$i]['attributes'];
}
}
break;

case 'open':
$name = $values[$i]['tag'];
$size = isset($child[$name]) ? sizeof($child[$name]) : 0;
$child[$name][$size] = $this->_struct_to_array($values, $i);
break;

case 'close':
return $child;
break;
}
}
return $child;
}//_struct_to_array

/**
* createArray($data)
*
* This is adds the contents of the return xml into the array for easier processing.
*
* @access public
* @param string $data this is the string of the xml data
* @return Array
*/
function createArray()
{
$xml = $this->xml;
$values = array();
$index = array();
$array = array();
$parser = xml_parser_create();
xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
xml_parse_into_struct($parser, $xml, $values, $index);
xml_parser_free($parser);
$i = 0;
$name = $values[$i]['tag'];
$array[$name] = isset($values[$i]['attributes']) ? $values[$i]['attributes'] : '';
$array[$name] = $this->_struct_to_array($values, $i);
return $array;
}//createArray

}//XmlToArray
?>


Результат выполнения скрипта с использованием XML:
Цитата
[11] => Array
(
[birthday] => 16.05.1990
[first_name] => Оленька
[is_online] =>
[last_name] => Конон
[link] => http://my.mail.ru/mail/olchiksolnyshko/
[location] => Array
(
[0] => Array
(
[city] => Array
(
[0] => Array
(
[id] => 2714
[name] => Юрюзань
)

)

[country] => Array
(
[0] => Array
(
[id] => 24
[name] => Россия
)

)

[region] => Array
(
[0] => Array
(
[id] => 282
[name] => Челябинская обл.
)

)

)

)

[nick] => Оленька Конон
[pic] => http://avt.appsmail.ru/mail/olchiksolnyshko/_avatar
[pic_big] => http://avt.appsmail.ru/mail/olchiksolnyshko/_avatarbig
[pic_small] => http://avt.appsmail.ru/mail/olchiksolnyshko/_avatarsmall
[referer_id] =>
[referer_type] =>
[sex] => 1
[uid] => 15434324707673817446
)


Результат выполнения скрипта с использованием JSON
Цитата
[11] => Array
(
[link] => http://my.mail.ru/mail/olchiksolnyshko/
[location] => Array
(
[country] => Array
(
[name] => Россия
[id] => 24
)

[city] => Array
(
[name] => Юрюзань
[id] => 2714
)

[region] => Array
(
[name] => Челябинская обл.
[id] => 282
)

)

[uid] => 15434324707673817446
[nick] => Оленька Конон
[sex] => 1
[is_online] => 0
[pic_small] => http://avt.appsmail.ru/mail/olchiksolnyshko/_avatarsmall
[pic_big] => http://avt.appsmail.ru/mail/olchiksolnyshko/_avatarbig
[pic] => http://avt.appsmail.ru/mail/olchiksolnyshko/_avatar
[last_name] => Конон
[referer_id] =>
[birthday] => 16.05.1990
[referer_type] =>
[first_name] => Оленька
)


Заебатые массивы не правда ли smile.gif

З.Ы. Интерисуют классы/функции для конвертации XML в массив, тот что я использовал, он иногда криво работает при совпадении имен.
X-ray
Написал скрипт для получения информации о текущем пользователе (просматривающем приложение).
Код
<?

//Получаем uids текущего пользователя

$referer = $_SERVER['HTTP_REFERER'];
//Разбиваем полученный рефферер на переменные
$pieces = explode("/", $referer);
//Получаем uids в виде JSON
$content = file_get_contents("http://appsmail.ru/platform/".$pieces[3]."/".$pieces[4]."/");
//Переводим из JSON в массив
$uid = json_decode($content, true);

//Декодируем URL на переменные
parse_str(urldecode($_COOKIE['mrc']));

//Закоментированные данные могут где нибудь пригодиться
/*
echo "app_id: ".$app_id."<br>";
echo "session_key: ".$session_key."<br>";
echo "authentication_key: ".$authentication_key."<br>";
echo "oid: ".$oid."<br>";
echo "vid: ".$vid."<br>";
echo "window_id: ".$window_id."<br>";
echo "ext_perm: ".$ext_perm."<br>";
echo "session_expire:".$session_expire."<br>";
*/

$url = "http://www.appsmail.ru/platform/api"; //URL API куда будем слать запросы
$appsid="74"; //ID приложения
$private_key="1306064235f5359f"; //Приватный ключ
$secret_key="9e526e096a9"; //Секректный ключ
$method="users.getInfo"; //Используемый метод API
$format="json"; //Формат выдачи XML или JSON
$uids = $uid['uid'];
//secure=1 означает, что данные будут передаваться как Сервер-Сервер
//Расчет параметров для формирования сигнатуры
$params="app_id=".$appsid."format=".$format."method=".$method."secure=1session_key=".$session_key."uids=".$uids."";
//Расчет сигнатуры
$sig = md5($params.$secret_key);

// формируем строку с данными
$postdata = "format=".$format."&secure=1&method=".$method."&app_id=".$appsid."&session_key=".$session_key."&sig=".$sig."&uids=".$uids."";


//Формируем функцию для передачи данных методом POST
function post_send ($url,$postdata) {

  $ch = curl_init( $url ); //Инициализируем curl
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_HEADER, 0);
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  curl_setopt($ch, CURLOPT_ENCODING, "");
  curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
  curl_setopt($ch, CURLOPT_TIMEOUT, 120);
  curl_setopt($ch, CURLOPT_POST, 1);
  curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);

  $content = curl_exec( $ch );
  $err     = curl_errno( $ch );
  $errmsg  = curl_error( $ch );
  $header  = curl_getinfo( $ch );
  curl_close( $ch );

  $header['errno']   = $err;
  $header['errmsg']  = $errmsg;
  $header['content'] = $content;
  return $header;
}
  //Парсим результаты

  //Отправляем POST запрос
  $result = post_send( $url, $postdata );
  //Получаем результат
  $html = $result['content'];
  header('Content-Type: text/html; charset="utf-8"'); //Меняем кодировку на UTF-8

//Выводим массив

// Если использовали XML вывод
if($format="xml")
   {
//Преобразуем XML в массив
         
//Подключаем класс для конвертации XML в массив
require_once "class.xmltoarray.php";

//Создание объекта для нового класса
$xmlObj = new XmlToArray($html);
//Создаем массив
$arrayData = $xmlObj->createArray();
//Выводим

echo "<pre>";
print_r($arrayData);
echo "</pre>";
    }
//Если использовали JSON вывод
if($format="json")
   {
//Преобразуем JSON в массив

$arrayData = json_decode($html, true);

echo "<pre>";
print_r($arrayData);
echo "</pre>";
}

    ?>
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
пїЅпїЅпїЅпїЅпїЅ IP.Board © 2001-2012 IPS, Inc.