Форум сообщества Clodo.ru: Пример обращения к API на PHP - Форум сообщества Clodo.ru

Перейти к содержимому

Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

Пример обращения к API на PHP

#1 Пользователь офлайн   andrey 

  • Clodo team
  • Группа: Администраторы
  • Сообщений: 58
  • Регистрация: 27 Январь 11

Отправлено 17 Апрель 2011 - 17:36

Хочу сразу предупредить - это не готовая библиотека для работы с API, а именно примеры запросов. По идее они все описаны в документации (по крайней мере xml-вариант).

function api_req($url,$http_method,$headers,$post_data="")                                                                                                   
{                                                                                                                                                            
    $headers[]="Accept: application/json";                                                                                                               
                                                                                                                                                             
    $ch = curl_init();                                                                                                                                   
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $http_method);                                                                                               
    curl_setopt($ch, CURLOPT_URL, $url);                                                                                                                 
    curl_setopt($ch, CURLOPT_HEADER, 1);                                                                                                                 
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);                                                                                                      
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);                                                                                                         
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);                                                                                                         
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);                                                                                                         
    if ($post_data)                                                                                                                                      
    {                                                                                                                                                    
        curl_setopt($ch, CURLOPT_POSTFIELDS,$post_data);                                                                                             
    }                                                                                                                                                    
    $res=curl_exec($ch);                                                                                                                                 
    curl_close($ch);                                                                                                                                     
                                                                                                                                                             
    if (strpos($res,"X-Auth-Token:")!==false)                                                                                                            
    {                                                                                                                                                    
        preg_match("|X-Auth-Token: ([a-z0-9_]+)|i",$res,$match_token);                                                                                   
        preg_match("|X-Server-Management-Url: ([a-z0-9_/:\\.]+)|i",$res,$match_url);                                                                                   
        return array("token"=>$match_token[1],"url"=>$match_url[1]);                                                                                                                          
    }                                                                                                                                                    
                                                                                                                                                             
    $res=substr($res,strpos($res,"\r\n\r\n")+4);                                                                                                         
    return json_decode($res);                                                                                                                            
}


При авторизации эта функция вернет токен и урл(именно он должен использоваться для последующих запросов) для доступа к апи, в остальных случаях - массив данными ответа.

Примеры параметров для этой функции:
$user_login="login"; // логин пользователя
$user_key="api_key"; // ключ, который был получен в панели
$url="http://api.clodo.ru/"; // url для авторизации. после авторизации сюда будет записан url для последующих запросов

//// AUTH ///////////////////////////////////////////////////////////////////////////////                                                                    
$http_method="GET";                                                                                                                                          
$headers=array(                                                                                                                                              
                "Accept-language: en",                                                                                                       
                "X-Auth-User: ".$user_login,                                                                                                 
                "X-Auth-Key: ".$user_key,                                                                                                    
);                                                                                                                                   
$res=api_req($url,$http_method,$headers);
if ((!$res)||(is_object($res)))                                                                                                                        
{                                                                                                                                                            
        echo "Ошибка авторизации!\n";                                                                                                                        
        exit;                                                                                                                                                
}
$url=$res["url"];
$token=$res["token"];
/////////////////////////////////////////////////////////////////////////////////////////                                                                    

//// CREATE /////////////////////////////////////////////////////////////////////////////                                                                    
$url_cmd=$url."/v1/servers/";                                                                                                                      
$http_method="POST";                                                                                                                                         
$headers=array(                                                                                                                                              
                        "Accept-language: en",                                                                                                               
                        "X-Auth-Token: ".$token,                                                                                                            
                        "Content-Type: application/xml"                                                                                                      
                );                                                                                                                                           
$post_data='<?xml version="1.0" encoding="UTF-8"?>                                                                                                           
                        <server>                                                                                                                             
                                <name>server</name>
                                <vps_os>1</vps_os>
                                <vps_memory>256</vps_memory>                                                                                                 
                                <vps_hdd>5</vps_hdd>                                                                                                         
                                <vps_admin>1</vps_admin>                                                                                                     
                        </server>';                                                                                                                          
$result=api_req($url_cmd,$http_method,$headers,$post_data);                                                                                                      
/////////////////////////////////////////////////////////////////////////////////////////

//// STOP ///////////////////////////////////////////////////////////////////////////////                                                                    
$vps_num=1; // номер впс (в панели он отображается в формате "<id пользователа>-<номер впс>". здесь нужно указать только номер впс) 
$url_cmd=$url."/servers/".$vps_num."/action";                                                                                                          
$http_method="POST";                                                                                                                                         
$headers=array(                                                                                                                                              
                                "Accept-language: en",                                                                                                       
                                "X-Auth-Token: ".$token,                                                                        
                                "Content-Type: application/xml"                                                                                              
                        );                                                                                                                                   
$post_data='<?xml version="1.0" encoding="UTF-8"?><stop/>';                                                                                                                  
$result=api_req($url_cmd,$http_method,$headers,$post_data);                                                                                                      
/////////////////////////////////////////////////////////////////////////////////////////                                                                    

//// START //////////////////////////////////////////////////////////////////////////////                                                                    
$vps_num=1; // номер впс (в панели он отображается в формате "<id пользователа>-<номер впс>". здесь нужно указать только номер впс) 
$url_cmd=$url."/servers/".$vps_num."/action";                                                                                                          
$http_method="POST";                                                                                                                                         
$headers=array(                                                                                                                                              
                                "Accept-language: en",                                                                                                       
                                "X-Auth-Token: ".$token,
                                "Content-Type: application/json"                                                                                             
                        );                                                                                                                                   
$post_data='{"start":1}';
$result=api_req($url_cmd,$http_method,$headers,$post_data);
/////////////////////////////////////////////////////////////////////////////////////////                                                                    

//// Подробный список VPS ///////////////////////////////////////////////////////////////                                                                    
$url_cmd=$url."/servers/detail";                                                                                                          
$http_method="GET";                                                                                                                                          
$headers=array(                                                                                                                                              
                                "Accept-language: en",                                                                                                       
                                "X-Auth-Token: ".$token
                        );                                                                                                                                   
$result=api_req($url_cmd,$http_method,$headers,$post_data);
/////////////////////////////////////////////////////////////////////////////////////////                                                                    


Примеры каких запросов еще нужны?
4

#2 Пользователь офлайн   Евгений Лаврентьев 

  • Модератор
  • PipPipPip
  • Группа: Пользователи
  • Сообщений: 621
  • Регистрация: 27 Январь 11
  • ГородМосква

Отправлено 17 Апрель 2011 - 17:52

А у меня получилось чуток по другому, у меня запросы труднее составляются. И организовал кэш файл с данными для последующих действий и раз в 20 мин обновляет его.
0

#3 Пользователь офлайн   andrey 

  • Clodo team
  • Группа: Администраторы
  • Сообщений: 58
  • Регистрация: 27 Январь 11

Отправлено 17 Апрель 2011 - 19:15

Просмотр сообщенияЕвгений Лаврентьев (17 Апрель 2011 - 17:52) писал:

А у меня получилось чуток по другому, у меня запросы труднее составляются. И организовал кэш файл с данными для последующих действий и раз в 20 мин обновляет его.


Я запостил самый базовый вариант. Более высокоуровневые решения уже от пользователя зависят.
0

#4 Пользователь офлайн   smet.denis 

  • Продвинутый пользователь
  • PipPipPip
  • Группа: Пользователи
  • Сообщений: 53
  • Регистрация: 19 Февраль 11
  • ГородБарнаул

Отправлено 18 Апрель 2011 - 10:19

Просмотр сообщенияandrey (17 Апрель 2011 - 19:15) писал:

Я запостил самый базовый вариант. Более высокоуровневые решения уже от пользователя зависят.


А не будет что-нибудь вроде официального варианта?
... как например ПХПшник у Facebook для REST запросов.

Это удобнее чем делать собственные велосипеды, да и поддерживать проще.
0

#5 Пользователь офлайн   andrey 

  • Clodo team
  • Группа: Администраторы
  • Сообщений: 58
  • Регистрация: 27 Январь 11

Отправлено 19 Апрель 2011 - 09:47

Просмотр сообщенияsmet.denis (18 Апрель 2011 - 10:19) писал:

А не будет что-нибудь вроде официального варианта?
... как например ПХПшник у Facebook для REST запросов.

Это удобнее чем делать собственные велосипеды, да и поддерживать проще.


Возможно. Пока нет точной информации.
0

#6 Пользователь офлайн   smet.denis 

  • Продвинутый пользователь
  • PipPipPip
  • Группа: Пользователи
  • Сообщений: 53
  • Регистрация: 19 Февраль 11
  • ГородБарнаул

Отправлено 20 Апрель 2011 - 16:16

Просмотр сообщенияandrey (19 Апрель 2011 - 09:47) писал:

Возможно. Пока нет точной информации.


Если все же соберетесь делать, до ждем реализации на PHP, Python и ASP

как бе намекаю

Сообщение отредактировал smet.denis: 20 Апрель 2011 - 16:28

0

Поделиться темой:


Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей