Ознакомьтесь с нашей политикой обработки персональных данных
  • ↓
  • ↑
  • ⇑
 
14:54 

Запрос черновиков

marader
жизнь - замечательна и удивительна, до тех пор - пока тебя не заметят и не удивят.
почему-то, запрос черновиков возвращает пустоту.

Что get, что post.

@темы: post.get, Важность: 3 (Major), Срочность: средняя, Тип: Ошибка

14:46 

lock Доступ к записи ограничен

DDD
мне сказали, что ты меня все еще любишь
Закрытая запись, не предназначенная для публичного просмотра

21:00 

Примеры кода user.auth

fire-dragon
Возможно стоит добавить примеры кода и возможно тестовый аккаунт для апи.




В данном случае я получаю ошибку 67 "Неверный логин или пароль"

@темы: Важность: 1 (Trivial), Срочность: низкая, Тип: Предложение

19:22 

Юрий Рэйн
λOther side of the memory crystal. …λ
Добрый вечер!
Скажите пожалуйста, по какой причине были приняты решения при создании API, котрые признаться меня ставят в тупик:
1) Кодировать число как строку
2) Отказаться от JSON массивов и создать каждому посту ключа (который соответствует id поста, например).
Т.е. вместо {"count":8, "posts": [{},{}]} выбрать вариант, требующий более сложного разбора: {"count":"8", "posts": {"0": {}, "1":{}, }}

@темы: Тип: Предложение, Тип: Неудобство, Тип: Вопрос

15:05 

Проблема с post.create (?)

DDD
мне сказали, что ты меня все еще любишь
То ли лыжи не едут, то ли я.
Создаю новую запись через post.create и аттачу к ней изображение параметром attachment.
Все это, естественно, делается как multipart/form-data, потому что не буду же пихать урл-кодированный бинарник в x-www-form-urlencoded.
На сервер уходит такой пост-запрос:


В ответ приходит что, мол, запись успешно создана, но в записи нет загруженного изображения.

Ну и в целом очень-очень грустно жить без возможности работать с БИ через апи, и приходится делать все по-старинке, распарсивая нтмл. Например, через наиболее вменяемый способ, который /diary.php?upload=1&js и которым можно в один запрос зааплоадить изображение и тут же, в ответе того же соединения, получить ссылку на него. Можно хотя бы его как-то прикрутить к апи?

@темы: Тип: Ошибка

09:01 

Кодировка и авторизация

quirischa
администратор
(с капибарой на аватарке)
Проблема:

Пользователи с кириллицей в логине при правильном пароле получают ошибку авторизации "неверное имя пользователя или пароль".

Объяснение:

При авторизации (да и везде в других местах) используется кодировка win1251 (не юникод), что может привести к проблемам для пользователей с кириллическими символами в логине. Их логин при этом следует передавать в кодировке url-encode(win1251), а не url-encode(utf-8).

Пример:

Для пользователя "Пользователь" правильным запросом будет:

http://www.diary.ru/api/?method=user.auth&username=%CF%EE%EB%FC%E7%EE%E2%E0%F2%E5%EB%FC&password&appkey


а не такой:

http://www.diary.ru/api/?method=user.auth&username=%D0%9F%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C&password&appkey


Для наглядного сравнения url-encode(win1251) и url-encode(utf-8) можно воспользоваться онлайн-утилитой:
www.codenet.ru/services/urlencode-urldecode/

@темы: method=user.auth

20:03 

АльКорд
beta-тестер
Обнаружился баг в методе journal.get: в своем профиле на сайте я вижу дату создания дневника, однако в ответе метода приходит ctime, равный "0".
Почините, пожалуйста.

@темы: journal.get, Статус: доработано

10:34 

Изменение в API

gluker
очень_очень_очень_много_букв_ без_пробелов
user.get - получение информации о пользователе
sid - идентификатор сессии
[userid] - идентификатор запрашиваемого пользователя, при отсутствии значения возвращается профиль текущего юзера
[fields] - список полей через "," которы необходимо получить, поумолчанию - все поля

ответ:
userid – идентификатор пользователя;
username – имя пользователя (логин);
shortname – короткое имя пользователя;
journal - тип дневника (0 – нет, 1 - дневник, 2 – сообщество);
country - страна проживания;
region – регион проживания;
city – город;
homepage – домашняя страница;
sex – пол;
education – образование;
sfera – сфера деятельности;
avatar – аватар;
joindate – дата регистрации;
email – эл.почта;
icq;
openid;
birthday – день рождения;
fav – избранные;
readers – постоянные читатели;
mycommunity.members – члены сообщества;
community.master – владелецы сообществ;
community.moderators – модератор сообществ;
community.member – член сообществ;

favs2 – избранные (userid, username);
readers2 – постоянные читатели (userid, username);
mycommunity.members2 – члены сообщества (userid, username);
mycommunity.masters2 – владелецы сообществ (userid, username);
mycommunity.moderators2 – модераторы сообществ (userid, username);
community.member2 – член сообществ (userid, journal_title);

interest – интересы;
about – о себе;

@темы: Тип: Изменение, user.get

22:32 

АльКорд
beta-тестер
Нужно ввести глобально в каждый метод два новых опциональных параметра:
1. список того, что нужно выдать в ответе (через запятую)
2. список того, что не нужно выдавать в ответе (через запятую)

@темы: Срочность: средняя, Статус: не исправлено, Тип: Новшество, Тип: Предложение

21:20 

АльКорд
beta-тестер
1. Нет возможности определить, был ли поднят пост, чтобы использовать post.up и post.down по ситуации.
Добавьте, пожалуйста, в обджекты возвращаемого ответа от post.get дополнительное поле-флаг.

2. Узнать, что пост в цитатнике, можно только, получив все посты в своем цитатнике. Нет возможности определить это на экране просмотра всех постов дайри, реализовав тем самым, нечто аналогичное ajax реализации этого функционала на странице просмотра дайри на сайте.
Пожалуйста, добавьте в post.get еще один флаг, определяющий, находится ли пост в цитатнике или нет.

@темы: post.get, Статус: решено

00:07 

АльКорд
beta-тестер
Найден баг в post.create: если публиковать запись в черновики, отправляя в теле post только method, sid, type и juserid, то пост сохраняется в черновиках успешно, но откуда-то имеет одну @тему, равную одному пробелу. Если публиковать пост не в черновики, а непосредственно в дайри, то все ок.

@темы: post.create, Статус: доработано

01:05 

krossovochkin
Хочешь чуда? Будь чудом ©
Доброго времени суток.
Скажите, чем вы парсите ответы с сервера?

Я, честно, ожидал увидеть Json, но тут какая-то вроде и похожая вещь, но к которой не знаю как подойти.
Хочется иметь аналог gson библиотеки или вроде того, которая делает преобразование строки в объект.

@темы: Тип: Вопрос, Статус: решено, Срочность: средняя, Важность: 1 (Trivial)

13:16 

lock Доступ к записи ограничен

yulia_shabunio
меняю пропорции мира в сторону розовых пони
Закрытая запись, не предназначенная для публичного просмотра

04:11 

Обеспечить совместимость параметров post.get, post.create, post.update

Ri
И тесно облакам.
Сейчас наблюдается полнейшая неразбериха в параметрах этих методов. Одни и те же вещи там выдаются (или передаются) по-разному. Примеров масса:

- close_access_mode и close_access_mode2 против access
- poll_answer_x против poll_src.answer
- no_comments против no_comment

Нужно сделать так, чтобы в post.get можно было получить всю информацию, необходимую для обновления записи в post.update без потери данных. Сейчас некоторых параметров просто нет, а с другими приходится извращаться: access приходится вручную разделять на close_access_mode и close_access_mode2 с помощью сравнения с 10, для poll_src.answer приходится итерироваться и переделывать структуру данных. Полезность API в таком случае кажется сомнительной. Дайте возможность просто взять и отредактировать запись. Это же такая простая задача. Откуда такие безумные параметры?

@темы: Статус: решено, Важность: 3 (Major), post.update, post.get, post.create, Тип: Неудобство

15:43 

Система версий

Ri
И тесно облакам.
Как я и предсказывал, начались проблемы с совместимостью. Предлагаю следующую реализацию.

Код каждой версии API хранится на сервере в отдельной папке. Если нужно что-то поменять в API, код текущей версии не меняется, вместо этого создается новая папка. Исключение нужно сделать только для уязвимостей, которые нужно чинить и во всех предыдущих версиях.

Если какой-то код не относится напрямую к API, но используется в коде API, то необходимо его скопировать в папку с кодом API и использовать только скопированную версию. Это нужно потому, что если код останется вне папки API, то в какой-то момент кто-то забудет о том, что он используется в некоторых версиях API, и поменяет его. В результате API сломается.

Если происходят какие-то другие изменения в проекте (например, изменения структуры БД), нужно следить за тем, чтобы старые версии не ломались. Желательно сделать автоматические тесты всех имеющихся версий API и запускать эти тесты регулярно.

Для версий API устанавливается срок жизни, в течение которого они будут работать, даже если выходят новые версии API. Этот срок должен быть достаточно большим, чтобы разработчики успели обновить приложения. (Прошу в комментариях написать, кому какого срока достаточно.) С другой стороны, если нет необходимости удалять старую версию, то лучше этого не делать даже после того, как ее срок действия закончился. Когда API будет отшлифовано, нужно будет периодически делать версии API с долгосрочной поддержкой.

В документации нужно завести отдельную страничку для каждой версии API, а также главную страничку с таблицей, в которой указаны ссылки на версии API и сроки поддержки этих версий.

Для упрощения реализации в качестве версии лучше использовать обычное целое число. Для указания версии API можно выбрать один из следующих способов:

1) Передавать version=42 в качестве одного из GET- или POST-параметров. Этот способ более красивый.

2) В качестве URL для доступа к API использовать www.diary.ru/api/version42/?method=... Я бы предпочел этот способ, так как он более надежный. Не нужно делать общую точку входа для всех версий. Каждая версия будет просто храниться в папке versionN. В таком варианте меньше вероятность, что изменения в коде одной из версий как-то повлияют на остальные версии.

Если запрошенная версия не поддерживается, нужно отдавать клиенту сообщение об этом (во втором варианте реализации достаточно ошибки 404). Если версия не указана, то используется та версия, которая использовалась в момент введения системы версий.

@темы: Тип: Предложение, Статус: не исправлено, Важность: 3 (Major)

09:55 

АльКорд
beta-тестер
Метод user.get имеет на первый взгляд исчерпывающую информацию, судя по документации. Однако, на деле JSON-массивы fav, readers и mycommunity.members, community.master, community.moderator и community.member имеют только список ID. Оно, может быть, когда-то и удобно, однако, на деле оказывается не так.

Если мы хотим приблизительно воссоздать профильную страницу со списком избранных и ПЧ под общей информацией юзверя или страницу списка избранных, то, мы имеем список ID, да. Однако, чтобы вывести ники и названия дневников в аккуратном списке, потребуется 2*N запросов, где N - длина одного массива из этих шести. Можно, конечно, выводить список с пагинацией или реалтаймовой подгрузкой (только на странице списка избранного), как это сейчас модно, но, даже с пагинацией в limit=20, запросов на сервер улетит 40 штук, следовательно, возрастет нагрузка на сервер и время получения всей необходимой информации клиентом.

Вы не могли бы расширить эти массивы с простыми типами данных до JSON-обджектов примерного вида:

? В идеале бы ввести такое же необязательное поле fields, которое уже есть в этом методе, но для вот этих массивов, так как кроме моего такого желания есть желание другого человека, и ему важно в таком обджекте еще иметь дату последнего поста.

Или, как наиболее логичный вариант, завести дополнительный метод на получение такой информации. Во-первых, устоявшийся user.get не тронется, весь работающий код клиентов под его сигнатуру и возвращаемые данные не сломается. Во-вторых, такой метод можно вызывать только по надобности.

@темы: Статус: решено, user.get

11:02 

Изменение в API

gluker
очень_очень_очень_много_букв_ без_пробелов
post.get - получение набора записей
sid - идентификатор сессии;
type - тип запрашиваемого содержимого (diary - дневник/сообщество, favorites - избранное, quotes - цитатник, notepad - блокнот, draft - черновики, last - последнии записи, by_id - по списку postid (параметр: ids - идентификаторы перечисляются через запятую) не более 100 за один запрос))
[juserid]/[shortname] – - идентификатор дневника / короткое имя пользователя, раздел дневника которого, запрашивается. пропуск параметра - текущий пользователь;
[from] - начало выборки
[src] - параметр определяющий тип получаемых записей (1 - исходник; 0 (поумолчанию) - запись готовая для вывода)

ответ:
postid - идентификатор записи;
dateline_date - дата публикации;
dateline_cdate - дата первой публикации записи;
comments_count_data - количество комментариев;
access - степень закрытости записи: 0 - открыта для всех, 1 - открыта для избранных, 2 - закрыта для списка, 3 - открыта для списка, 4 - открыта для белого списка, 5 - открыта для ПЧ, 6 - открыта для зарегистрированных, 7 - закрыта для всех кроме владельцев и модераторов., 8 - откр. для членов сообщства, +10 - для взрослых;
jaccess - степень закрытости дневника, из которого получаемая запись: 0 - открыт для всех, 1 - открыт для избранных, 2 - открыт для зарегистрированных, 3 - открыт для списка, 4 - закрыт для списка, +10 - для взрослых;
subscribed - поле показыающее статус подписки текущего пользователя на дискуссию в записи;
juserid - идентификатор дневника;
shortname - короткое имя дневника;
journal_name - название дневника (для типов: last,quote,favorite);
current_music - музыка;
current_mood - настроение;

author_userid - идентификатор автора записи;
author_shortname - короткое имя дневника автора записи;
author_username - логин автора записи;
author_title - подпись автора записи;
avatar_path - аватар автора записи;

title - заголовок записи;
message_html - текст записи;
poll - голосование;

SRC
no_smile - не преобразовывать смайлы в графический образ;
no_comment - без комментариев;
message_src - исходный текст записи;
access_list - список доступа;
poll_src - голосование;
- question - вопрос;
- multiselect - тип голосования;
- end - признак окончания голосования;
- answer - ответы;

@темы: Тип: Изменение, post.get

15:14 

АльКорд
beta-тестер
Ни с того ни с сего пропало поле message_src из метода post.get для своих постов. В результате чего у уже рабочих клиентов с отточенной логикой редактирования поста пропала возможность редактировать пост, не убивая при этом его текст.



Пожалуйста, срочно почините это.

@темы: Тип: Ошибка, Статус: решено, Срочность: высокая, Важность: 4 (Critical), post.get

11:38 

АльКорд
beta-тестер
Метод post.get может принимать в качестве параметра juserid, то есть ID дневника.
Однако, нигде этот идентификатор не узнать: journal.get возвращает только userid, то есть ID юзверя.
Введите, пожалуйста, в journal.get еще и ID дневника/сообщества.

@темы: get.post, Статус: решено

04:00 

Режим совместимости

Ri
И тесно облакам.
Если я не ошибаюсь, раньше в post.update можно было не указывать уровень доступа, и он просто не менялся. Сейчас, если его не указать, запись становится открытой. Есть еще некоторые параметры, которых нет в API, например, альтернативный текст закрытой записи. Если он будет позже добавлен и сделан обязательным, то придется обновить код, иначе либо всё сломается, либо альтернативный текст будет просто удаляться, что нехорошо.

Будет ли поддерживаться обратная совместимость? Если нет, то необходимо дать возможность указывать, какую версию API использует приложение, и поддерживать предыдущие версии API хотя бы некоторое время.

@темы: Важность: 3 (Major), Тип: Предложение

@API

главная