• Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: JonMagon  
Сообщество uCoz » Мастерская uCoz » Использование PHP и API на uCoz » uAPI Framework
uAPI Framework
JonMagon
Модератор форума
Сообщений: 2291
Репутация: 1828

Сообщение # 1 | 16:06:32
uAPI Framework — класс для работы с API uCoz'а, позволяющий быстро получать и устанавливать данные посредством cURL'а.


Начало использования

Для начала скачиваем сам класс api_class.php и кладем в ту же папку, где будет находится будущий PHP скрипт.

Создаем новый *.php файл и подключаем api_class.php
Код
require_once("api_class.php");


Далее создаем новый объект класса и открываем новую сессию.
Код
$api = new api();
$api -> start_session();


Настройки авторизации

Прежде всего устанавливается самый главный параметр — адрес сайта; путем использования метода set_config.
Код
$api -> set_config('site', 'http://адрес_сайта/');


Если в «Общих настройках» указан API Key, то и тут его также необходимо указать.
Код
$api -> set_config('apikey', 'API ключ');


Стоит обратить внимание, что некоторые поля (E–mail, IP и т.д.) API не отдает в режиме гостя, поэтому, в случае необходимости получения этих данные, следует также указать настройки авторизации: логин и пароль пользователя, у которого есть права не просмотр этих полей (группа «Администраторы»).
Код
$api -> set_config('login', 'Логин');
$api -> set_config('password', 'Пароль');


Проверяем правильность кода и вызываем метод авторизации, который войдет на сайт в соответствии с указанными настройками.
Код
$api -> auth();


Полезно знать

Для экономии времени работы скрипта можно авторизоваться лишь однажды, при этом будет создан файл-куки, который будет в дальнейшем использоваться. Однако, стоит помнить, что есть обстоятельства, когда необходима повторная авторизация: ручная авторизация бота на сайте, просрочка срока авторизации.

К примеру, можно занести авторизацию под условие необязательного GET-параметра:
Код
if (isset($_GET['auth']))
    $api -> auth();


Использование

После выполнения авторизации, в полном объеме можно получать и устанавливать данные модулей сайта.

Получение данных

get_api('адрес страницы')

Формирует ссылку для доступа к API модуля и осуществляет запрос. Возвращает ассоциативный массив.

Пример использования:
Код
$user = $api -> get_api('index/8-1');
echo $user['USER_EMAIL'];


get_json('адрес страницы')

Предназначен для самописного API. Осуществляет запрос и парсит данные со страницы. Возвращает ассоциативный массив.

Пример использования:
На странице, куда осуществляется запрос:
Код
<?if($USERNAME$ == 'Bot')?><?substr($BODY$, 0, 0)?><?substr($ADMIN_BAR$, 0, 0)?>{"email": "$_EMAIL$"}<?else?>...
Обычный код страницы
...<?endif?>

PHP:
Код
$user = $api -> get_json('index/8-1');
echo $user['email'];


Установка данных

send_post('адрес страницы', 'страница–реферал', 'POST запрос');

Устанавливает данные указанного модуля.

Пример использования:
Код
$api -> send_post('/index', null, array('rank' => 3,
'title' => 'тест',
'a' => 41,
's' => 1,
't' => 1,
'ssid' => ($api -> session['ssid'])));

Функция auth после выполнения возвращает булевое значение, позволяющее определить успешность авторизации.
  • true — авторизация прошла успешно
  • false — неправильный логин или пароль
Пример использования:
Код
if ($api -> auth())
    echo "Авторизация прошла успешно"
else
    echo "Ошибка авторизации";
Прикрепления: 3105347.php(3.4 Kb)

Не оказываю поддержку посредством ЛС/ICQ/Skype/AIM/XMPP/E-mail.
Supportino
Сообщений: 5
Репутация: 0

Сообщение # 2 | 15:30:49
Содержимое php:
Код
# Функция парсера информации о пользователе
function API_parser($id,$q=0) {
    global $config, $tpl;
     

    $context = stream_context_create(array('http' => array('method' => "GET", 'header' => "Content-Type: text/xml",'timeout' => 8)));
    $file = file_get_contents($config['site_url']."/api/index/8-$id", false, $context);
    if (strpos('200', $http_response_header[0]) || !$file) {
       return false;
    }
    $response = xmlrpc_decode($file, "utf8");
    if ($response && xmlrpc_is_fault($response)) {
       return false;
    }
     
    if ($q == 0) {
       $tpl->set('{user_name}',$response['USER_USERNAME']);
       $tpl->set('{user_full_name}',$response['USER_NAME']);
       if ($response['USER_GENDER'] == 1) {
          $tpl->set('{user_gender}','М.');
       } else if ($response['USER_GENDER'] == 2) {
          $tpl->set('{user_gender}','Ж.');
       }
       if ($response['USER_AVATAR'] == '...' OR $response['USER_AVATAR'] == '') {
          $tpl->set('{user_avatar}',$config['no-avatar']);
       } else {
          $tpl->set('{user_avatar}',$response['USER_AVATAR']);
       }
       $tpl->set('{user_group_id}',$response['USER_GROUPID']);
       $tpl->set('{user_email}',$response['USER_EMAIL']);
       $tpl->set('{user_icq}',$response['USER_ICQ']);
       $tpl->set('{user_aol}',$response['USER_AOL']);
       $tpl->set('{user_msn}',$response['USER_MSN']);
       $tpl->set('{user_yahoo}',$response['USER_YAHOO']);
       $tpl->set('{user_birthdat}',$response['USER_BIRTHDAY']);
       $tpl->set('{user_zodiac}',$response['USER_ZODIAC']);
       $tpl->set('{user_group_name}',$response['USER_GROUPNAME']);
       $tpl->set('{user_reputation}',$response['USER_REPUTATION']);
       $tpl->set('{user_awards}',$response['USER_AWARDS']);
    }
    if ($q != '0') {
       return $response[''.$q.''];
    }
}



А вот содержимое файла tpl:
Код
<a href="/index/8-{user_id}"><img alt="" style="border:1px solid #dcdcdc;" width="45" src="{user_avatar}" /></a>


{user_id} работает, а аватарка нет.
Помогите разобраться.
JonMagon
Модератор форума
Сообщений: 2291
Репутация: 1828

Сообщение # 3 | 15:33:09
Supportino, воспользуйтесь библиотекой, представленной в этой теме.

Не оказываю поддержку посредством ЛС/ICQ/Skype/AIM/XMPP/E-mail.
Supportino
Сообщений: 5
Репутация: 0

Сообщение # 4 | 15:44:18
Добавил так:
$userd = $api -> get('USERS', 1);
$tpl->set('{user_avka}',$user['USER_AVATAR']);

Теперь вообще не добавляется отзыв (скрипт отзывы о пользователе).

Вот содержимое файла:
[code][/code]<?php
/*!
###########################################################
Модуль: Отзывы для uCoz
-----------------------------------------------------------
Автор: syp41k
От: uSite.Su
-----------------------------------------------------------
Назначение этого файла: Функции
###########################################################
*/
if(!defined('REVIEWS')) die('Generation page is not available!');

# Функция обработки данных
function dataProcessing($value) {
if (get_magic_quotes_gpc()) {
$value = stripslashes($value);
}
$value = htmlspecialchars($value);
return $value;
}

# Функция перевода time() в понятную дату
function formatDate($time){
return date("j.m.Y H:i:s", $time);
}

# Функция добавления отзыва
function add_review($data,$t='a+') {
global $data_base;

if ($t == 'w') {
$add = $data;
} else {
$add = var_export($data, true);
}
$contents = $add;
$handler = fopen('data_base.php', $t);
if ($t == 'w') {
fwrite($handler, "<?php \nif(!defined('REVIEWS')) die('Generation page is not available!');");
}
if ($t != 'w') {
fwrite($handler, "\n\n\$data_base[] = ");
}
fwrite($handler, $contents);
if ($t != 'w') {
fwrite($handler, ";");
}
fclose($handler);
if ($handler) {
return true;
} else {
return false;
}
}

# Функция парсера информации о пользователе
function API_parser($id,$q=0) {
global $config, $tpl;
$user = $api -> get('USERS', 1);

$context = stream_context_create(array('http' => array('method' => "GET", 'header' => "Content-Type: text/xml",'timeout' => 8)));
$file = file_get_contents($config['site_url']."/api/index/8-$id", false, $context);
if (strpos('200', $http_response_header[0]) || !$file) {
return false;
}
$response = xmlrpc_decode($file, "utf8");
if ($response && xmlrpc_is_fault($response)) {
return false;
}

if ($q == 0) {
$tpl->set('{user_avka}',$user['USER_AVATAR']);
$tpl->set('{user_name}',$response['USER_USERNAME']);
$tpl->set('{user_full_name}',$response['USER_NAME']);
if ($response['USER_GENDER'] == 1) {
$tpl->set('{user_gender}','М.');
} else if ($response['USER_GENDER'] == 2) {
$tpl->set('{user_gender}','Ж.');
}
if ($response['USER_AVATAR'] == '...' OR $response['USER_AVATAR'] == '') {
$tpl->set('{user_avatar}',$config['no-avatar']);
} else {
$tpl->set('{user_avatar}',$response['USER_AVATAR']);
}
$tpl->set('{user_group_id}',$response['USER_GROUPID']);
$tpl->set('{user_email}',$response['USER_EMAIL']);
$tpl->set('{user_icq}',$response['USER_ICQ']);
$tpl->set('{user_aol}',$response['USER_AOL']);
$tpl->set('{user_msn}',$response['USER_MSN']);
$tpl->set('{user_yahoo}',$response['USER_YAHOO']);
$tpl->set('{user_birthdat}',$response['USER_BIRTHDAY']);
$tpl->set('{user_zodiac}',$response['USER_ZODIAC']);
$tpl->set('{user_group_name}',$response['USER_GROUPNAME']);
$tpl->set('{user_reputation}',$response['USER_REPUTATION']);
$tpl->set('{user_awards}',$response['USER_AWARDS']);
}
if ($q != '0') {
return $response[''.$q.''];
}
}

# Копирайт
function copyright($t) {
if ($t) {
return 'Module reviews for uCoz / by syp41k / skype: Joherlol';
} else {
return '<!-- Module reviews for uCoz / by syp41k / skype: Joherlol -->';
}
}

# Генерация уникального ID отзыва
function review_id_generete($id) {
global $data_base;
$id = $id + rand(0,100);
foreach ($data_base as $review) {
foreach ($review as $key => $value) {
if ($value['id_review'] == $id) {
$id = review_id_generete($id);
}
}
}
return $id;
}
?>

Добавлено (14 Июл 2013, 15:44:18)
---------------------------------------------
Ошибся, я прописал не $userd = $api -> get('USERS', 1);, а $user = $api -> get('USERS', 1)

JonMagon
Модератор форума
Сообщений: 2291
Репутация: 1828

Сообщение # 5 | 15:53:14
Supportino, прочтите инструкцию по классу.

Не оказываю поддержку посредством ЛС/ICQ/Skype/AIM/XMPP/E-mail.
Supportino
Сообщений: 5
Репутация: 0

Сообщение # 6 | 16:16:14
<?php
require_once("api_class.php");
$api = new api();
$api -> start_session();
$api -> set_config('site', 'http://sitesnews.net/');
$api -> set_config('apikey', 'тут я ключ указал');
$user = $api -> get('USERS', 1);
$api -> set_config('login', 'ExeleratioN');
$api -> set_config('password', 'тут пароль указал');
$api -> auth();
echo $user['USER_USERNAME'];
?>
Вроде всё правильно, но:
выводит так ({"SCRIPTDATA":"ExeleratioN","ERROR":""})
Оно ник выводит, да, но пишет же еще еррор, в чем проблема?
Ferro7
Сообщений: 284
Репутация: 227

Сообщение # 7 | 04:37:26
Цитата (Supportino)
но пишет же еще еррор

Error пустой!

Вы полюбили меня. Здесь я. (с)
Сообщение отредактировал Ferro7 - Понедельник, 15 Июл 2013, 04:37:43
JonMagon
Модератор форума
Сообщений: 2291
Репутация: 1828

Сообщение # 8 | 07:22:48
Supportino, в начало скрипта добавьте
Код
$___notjson = 1;


Эту часть
Код
$api -> set_config('login', 'ExeleratioN');
$api -> set_config('password', 'тут пароль указал');
$api -> auth();

Переместите до
Код
$user = $api -> get('USERS', 1);


Либо вообще уберите, т.к. в вашем варианте смысл в ней отсутствует.

Не оказываю поддержку посредством ЛС/ICQ/Skype/AIM/XMPP/E-mail.
JacksonMihailov
Сообщений: 259
Репутация: 107

Сообщение # 9 | 16:06:46
Надо "гетить" ssid со страницы добавления? или есть что то, что можно использовать без лишних движений?

jmDB - Текстовая база данных для uCoz
Сообщение отредактировал JacksonMihailov - Вторник, 19 Ноя 2013, 16:34:59
JonMagon
Модератор форума
Сообщений: 2291
Репутация: 1828

Сообщение # 10 | 16:43:36
JacksonMihailov, не совсем понял. При успешной авторизации ssid хранится в $api -> session['ssid']

Не оказываю поддержку посредством ЛС/ICQ/Skype/AIM/XMPP/E-mail.
JacksonMihailov
Сообщений: 259
Репутация: 107

Сообщение # 11 | 03:39:22
JonMagon, Тогда понятно.супер. Буду пробовать. ))

Добавлено (20 Ноя 2013, 03:39:22)
---------------------------------------------
В модули добавлять материалы получилось. Но как добавить комментарий от имени другого пользователя?

Код
$api ->  
send_post('http://site.ru/index/', null, array(
  'message' => 'some text',
  'a' => '36',
  'm' => '3',
  'id' => $mID,
  'user' => $user,
  'ssid' => $session));


И еще не понятно, как работает set('Модуль', ID, 'Тип данных', 'Значения')
Пробовал изменить сообщение в материале, но не получилось:
Код
$api -> set('publ', $mID, 'MESSAGE', array(3, 'Тест'));
P.S. что значит тройка в array?  


Извиняюсь за такое кол-во вопросов, на самом деле интересно. В поисковике информации особой нет.

jmDB - Текстовая база данных для uCoz
SOFTOLAB_COM
Сообщений: 1363
Репутация: 777

Сообщение # 12 | 11:06:33
JacksonMihailov, может вы уже достанете руки и посмотрите код класса что бы не задавать таких чрезвычайно глупых вопросов?

Благодарности можно оставить — в репутации.
Помощью в ЛС не занимаюсь, есть форум.
Занимаюсь сайтами на платной основе.
Шаманю на php и mysql с использованием бубна 80 lvl.
JonMagon
Модератор форума
Сообщений: 2291
Репутация: 1828

Сообщение # 13 | 13:38:39
Цитата JacksonMihailov ()
И еще не понятно, как работает set('Модуль', ID, 'Тип данных', 'Значения')

Данная функция постепенно дописывается, и в ней появляются все новые возможности. По сути, данная функция — оболочка для send_post, способная возвращать true или же false. Пример:
Код
return (strpos($this -> send_post('/index', null, array('rank' => $value[0],
'title' => $value[1],
'a' => 41,
's' => $id,
't' => 1,
'ssid' => $this -> session['ssid'])), 'Изменения сохранены') === false) ? false : true;


Цитата JacksonMihailov ()
Но как добавить комментарий от имени другого пользователя?

Возможность добавления комментариев от имен других пользователей не предусмотрена в системе uCoz.

Не оказываю поддержку посредством ЛС/ICQ/Skype/AIM/XMPP/E-mail.
JacksonMihailov
Сообщений: 259
Репутация: 107

Сообщение # 14 | 23:57:33
SOFTOLAB_COM,


JonMagon, Спасибо.

Добавлено (10 Апр 2014, 23:57:33)
---------------------------------------------

Добрый день.
У send_post(); есть callback?
и есть ли возможность передать массив категорий? (Материал входит в несколько категорий)
Код
'ocat' => array(1,5,6) - так не получается.

Спасибо.

jmDB - Текстовая база данных для uCoz
Сообщение отредактировал JacksonMihailov - Пятница, 11 Апр 2014, 00:10:21
JonMagon
Модератор форума
Сообщений: 2291
Репутация: 1828

Сообщение # 15 | 16:01:20
Цитата JacksonMihailov ()
У send_post(); есть callback?

Нет.
Цитата JacksonMihailov ()
и есть ли возможность передать массив категорий? (Материал входит в несколько категорий)

Данная возможность не проверялась. По сути, это должно выглядеть так:
Код
'ocat' => 1,
'ocat' => 2,
'ocat' => 3

Не оказываю поддержку посредством ЛС/ICQ/Skype/AIM/XMPP/E-mail.
Сообщество uCoz » Мастерская uCoz » Использование PHP и API на uCoz » uAPI Framework
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск: