Скрипт для обмена данными - offline_main.php
в него через POST в параметр xmlfile передается текстовый
файл, содержащий XML-запрос с необходимыми инструкциями.
Файл с XML-запросом может быть передан пока в двух кодировках:
1. UTF-8
2. Windows-1251
Кодировка файла должна быть корректно указана в заголовке
XML-запроса, иначе возможна потеря русских букв.
XML файл запроса содержит
1) какие данные хочется получить
2) какие данные хочется передать на сервере
На выходе отдается опять же XML файл, содержащий
1) те данные, которые хотелось получить
2) результаты добавления тех данных, что были переданы
примерная структура xml-файла:
<?xml version="1.0" encoding="windows-1251"?>
<QUERYS username="toto" password="789456" mainid="1">
<query QID="1" TYPE="17">
<id>4193934</id>
</query>
<query QID="1" TYPE="1">
<message>тестовое сообщение</message>
<headerofpost>тема</headerofpost>
<jpostid>34658</jpostid>
<attachfile>тема</attachfile>
<commentsubscribe>1</commentsubscribe>
</query>
</QUERYS>
Прим.:
- свойства QID и mainid могут быть заданы произвольно.
На выходе они будут выданы такими же, какими были даны
на вход offline_main.php
Нужны, ИмХО, для ориентации в собственных запросах при
разборе полученных результатов.
- желательно сохранять регистр таким, какой он указан в
данном руководстве.
- ноды типа commentsubscribe, parseurl и т.д., если их
значение нулевое, лучше совсем не включать в запрос.
- dpost передается в виде UnixTimestamp, т.е. это количество секунд
с начала эпохи Unix. Считайте и не забывайте о смещении к
Гринвичу ;)
- messagedate передается в формате "dd.mm.yyyy hh:mm:ss"
- максимальный размер сообщений: коммент и в форум - 10 000 симв.
пост в дневник - 50 000 симв.
- XML-ответ скрипта здесь не разбирается. там все ясно.
Возможные значения свойства TYPE
=1 - новый комментарий
=2 - новый пост в форум
=3 - новый пост в дневники
=4 - новое приватное сообщение
=5 - списки друзей
=6 - регистрация
=7 - получить новые комментарии
=8 - получить новые сообщение с форумов
=9 - получение новых сообщений друзей
=10 - получение новых приватных сообщений
=11 - получение новых смайлов
=12 - получение всех комментариев к заданному сообщению
=13 - получение CSS дневника
=17 - получение одного комментария
=18 - получение одного поста с форума
=19 - получение одного сообщения друзей
===1
message - текст сообщения
headerofpost - заголовок сообщения
jpostid - ид поста куда отвечать
attachfile - имя переменной где файл (необязательный параметр)
commentsubscribe - 1 если подписаться на ветку комментарии (если 0 или
нет, то нету подписки)
===2
message - текст сообщения
headerofpost - заголовок сообщения
threadid - ид форума куда постим
parseurl - (=1-парсить урлы)
===3
messagedate - дата, от которой будет сохранено сообщение (на самом
деле лучше не писать этот параметр, тогда сервер вернёт своё время)
message - текст сообщения
headerofpost - заголовок сообщения
parseurl - (=1-парсить урлы)
attachfile - имя переменной где файл
nocomment - признак без комментариев
privatepost - признак закрытая запись
commentsubscribe - 1 если подписаться на ветку комментария (если 0 или
нет, то нету подписки)
===4
message - текст сообщения
headerofpost - заголовок сообщения
tousername - имя кому приватное сообщение
parseurl - (=1-парсить урлы)
===5
action - add,del,get
worknick - рабочий ник
===6
много параметров пока нафик :)
===7
dpost - время последней скачивания
maxpost - количество скачиваемых постов
===8
dpost - время последней скачивания
maxpost - количество скачиваемых постов
===9
dpost - время последней скачивания
maxpost - количество скачиваемых постов
===10
maxpost - макс количество скачиваемых постов
===11
lastsmilieid - последний скаченный смайлид
===12
dpost
maxpost
===12
без параметров
===17, 18, 19
id - ид поста
Список ошибок, возвращаемых скриптом:
=3 - Ошибка авторизации
=2 - Недостаточно параметров
=21 - Разрешение только jpg gif
=22 - Не картинка
=23 - Файл слишком большой
=24 - Ошибка при закачке
=6 - Нет прав для добавления комментария
=53 - Нет непрочитанных приватных сообщений
=61 - Форум закрыт для постов
=62 - Сообщение превышает максимально допустимый объем
=63 - Защита от флуда (только что было добавлено такое же сообщение)
=4 - Ошибка авторизации
=5 - Нет прав для добавления поста в дневник
=31 - Неверное имя (при добавлении приватного, или нового друга)
=51 - Получатель не может получать приватные (отключена возможность в настройках)
=52 - Слишком длинное сообщение
-------------------------------------------------------------
вариант не окончательный. возможны дополнения по мере тестирования
формата обмена.
Появилась команда 13 – получение CSS дневника. Будет здорово, если кто-нибудь расшифрует что там за что отвечает.
К команде 17 появилась поддержка древовидности комментариев.
parent_id отвечает за идентификатор родителя
parent_id0 – идентификатор родителя нулевого уровня (корня ветки)
Если нули – то это коммент нулевого уровня.
commentnum – порядковый номер ветки, к которой принадлежит комментарий. Позволяет вычислить, поделив нацело на 30, номер страницы, на которой находится комментарий и правильно сформировать к ней ссылку
Если у вас есть предложения – пишите их в этом разделе, программисты по мере доработки будут переносить новые реализованные функции в основное описание, если эти предложения разумны и аргументировать отказ от тех, которые программе не нужны.
<?php
$username = 'USERNAME';
$password = 'PASSWORD';
$boundary = '---------------------' . substr(md5(rand(0, 32000)), 0, 10);
$xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n";
$xml .= "<QUERIS username=\"$username\" password=\"$password\">\r\n";
$xml .= " <query QID=\"1\" TYPE=\"3\">\r\n";
$xml .= " <headerofpost>Header</headerofpost>\r\n";
$xml .= " <message>Message</message>\r\n";
$xml .= " <parseurl>1</parseurl>\r\n";
//$xml .= " <privatepost>1</privatepost>\r\n";
$xml .= " </query>\r\n";
$xml .= "</QUERIS>\r\n";
$data = "--$boundary\r\n";
$data .= "Content-Disposition: form-data; name=\"xmlfile\"; filename=\"xmlfile\"\r\n";
$data .= "Content-Type: text/xml; charset=UTF-8\r\n\r\n";
$data .= "$xml\r\n";
$data .= "--$boundary\r\n";
$headers = "POST /offline_main.php HTTP/1.1\r\n";
$headers .= "Host: www.liveinternet.ru\r\n";
$headers .= "Content-Type: multipart/form-data, boundary=$boundary\r\n";
$headers .= "Content-Length: " . strlen($data) . "\r\n\r\n";
$headers .= $data;
//print "$headers\n\n\n";
$fs = fsockopen('www.liveinternet.ru', 80, $errno, $errstr, 30);
if ($fs) {
fwrite($fs, $headers);
$content = '';
while(!feof($fs)) {
$content .= fgets($fs, 128);
}
fclose($fs);
print $content;
}
?>