• ↓
  • ↑
  • ⇑
 
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

13:01 

Проблема с получением записей избранного и цитатника

quirischa
администратор
(с капибарой на аватарке)
Мы проверяем проблему с невозможностью получить записи избранного и цитатника произвольного пользователя с помощью метода post.get.

post.get&type=quote
post.get&type=favorites

@темы: method=post.get

17:44 

Harley Queen
female harlequin
Накопилось некоторое количество вопросов по API :)

1) Основное, что несколько смущает - это несоответствие возможностей при отправке новой записи и при получении существующей.
В частности, сейчас API при создании новой записи дает возможность указать музыку, настроение, создать голосование. И всем этим пользоваться совершенно нельзя, потому что нет никакой возможности показать пользователю, что получилось, поскольку post.get ничего подобного не поддерживает.

2) Очень хотелось бы, чтобы все же заработал метод post.get&type=favorites, который сейчас возвращает лишь записи собственного дневника текущего пользователя. В рамках мечтаний хотелось бы, конечно, еще и регулировать количество записей, которые входят в запрос, а также иметь возможность отбора по тэгам (и еще запрашивать список, собственно, этих тэгов).

3) Проблема с изменением размера встроенного объекта Flash-плеера. Таковой объект приходит в формате < iframe allowtransparency=\"true\" scrolling=\"no\" frameborder=\"0\" width=\"NNNpx;\" height=\"MMMpx;\" src=\"diary-media.ru/?длинная-предлинная строка\">< /iframe> То есть для того, чтобы изменить размер данного объекта, можно оперировать лишь параметрами width и height по тэгу iframe. А изменение этих параметров ведет только к изменению размера фрейма, но не размера содержимого в этом фрейме, которое зашито как раз где-то в длинной-предлинной строке. Получается несмертельно, конечно, но некрасиво - на скриншоте сверху приведен ресайз видео при помощи фрейма, а снизу - как должно было выглядеть:

Проблема решилась бы, если бы был доступен исходный html записи не только у своих, но и чужих записей тоже.

4) Еще бы очень хотелось в описании API увидеть коды возвращаемых ошибок, чтобы обрабатывать их соответственно ситуации.

5) Очень хотелось бы имя пользователя и ссылку на аватар в journal.get - это упростит запрос списка избранного.
Апд: похоже, это не "упростит", а единственный способ решить проблему. Если у человека в Избранном есть Diary-spirit или Diary-best с их ~600к участников - это смерть, это вообще не грузится.
В качестве альтернативы - может быть, проблему решит метод, более простой, чем user.get, который возвращает только имя пользователя и ссылку на аватар.

6) Еще вопрос. Запрос umail.get_folders показывает только папку "Входящие". Хотелось бы, однако, видеть еще и папку "Отправленные" - например, чтобы пользователь мог проверить, отправилось ли его письмо или нет (мало ли какие глюки с соединением).

В целом, несмотря на шероховатости, большое спасибо, что эта возможность в принципе появилась)

21:43 

Harley Queen
female harlequin
Еще небольшая неприятность в API. При создании нового комментария есть параметр
[avatarid] - аватар (доступно при подключении соответствующего сервиса);
Во-первых, хочу обратить внимание, что в API нет ни одного метода получения avatarid.
Во-вторых, без этого параметра в комментарии не ставится никакого аватара совсем, даже аватара по умолчанию (в новой записи в этом плане все в порядке, хотя синтаксис тот же).
Можно ли как-то исправить, чтобы у пользователя в комментарии подставлялся аватар по умолчанию? Очень уж страшненько без него выглядит.

00:03 

Harley Queen
female harlequin
Проблемы с запросом umail.get.
1) &limit=N не работает. Пишу &limit=20 - возвращает 100 писем. Аналогичным образом, пишу &from=20 - те же сто писем. Сорри, мой косяк.
2) Эти сто писем тоже некорректны. В моей папке "Входящие" 266, из них 7 непрочитанных. Запрос возвращает 93 письма от самого доисторического начала списка + 7 непрочитанных писем. Поставьте обратную сортировку в запросе, пожалуйста.

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

00:52 

quirischa
администратор
(с капибарой на аватарке)
Метод: user.getavatar

Описание
Метод работает, только если в настройках установлено отображение аватарок.

Параметры:
sid - идентификатор сессии;
[avatarid] - идентификатор аватара.

Ответ:
- count - количество аватаров;
- avatar - набор аватаров:
-- avatarid - идентификатор аватара;
-- width - ширина;
-- height - высота;
-- uri - ссылка относительно static.diary.ru

@темы: method=user.getavatar

01:13 

Обновления

администратор
(с капибарой на аватарке)
Метод: post.get

Ответ
access - способ закрытия записи:
0 - открыта для всех,
1 - открыта для избранных,
2 - закрыта для списка,
3 - открыта для списка,
4 - открыта для белого списка,
5 - открыта для постоянных читателей,
6 - открыта для зарегистрированных пользователей,
7 - закрыта для всех (в случае сообщества - для всех, кроме владельцев и модераторов),
8 - (для сообщества) открыта только для членов сообщества,
+10 - материалы для взрослых;


* * *

Метод: user.get

Параметры

[fields] - список полей через ",", которые необходимо получить (по умолчанию - все поля)

@темы: method=post.get, method=user.get

15:01 

update

quirischa
администратор
(с капибарой на аватарке)
notification.get

[+]

Ответ
discuss - дискусии:
discuss.journal_name - название дневника/сообщества;

@темы: method=notification.get

15:03 

update

quirischa
администратор
(с капибарой на аватарке)
journal.get

[+]

Ответ
access - степень закрытости дневника:
0 - открыт для всех,
1 - открыт для избранных,
2 - открыт для зарегистрированных пользователей,
3 - открыт для списка,
4 - закрыт для списка,
+10 - содержит материалы для взрослых.



* * *

post.get

[+]

Ответ
jaccess - степень закрытости дневника:
0 - открыт для всех,
1 - открыт для избранных,
2 - открыт для зарегистрированных пользователей,
3 - открыт для списка,
4 - закрыт для списка,
+10 - содержит материалы для взрослых;

@темы: method=post.get, method=journal.get

01:04 

quirischa
администратор
(с капибарой на аватарке)
post.get

[+]

Ответ
dateline_cdate - дата первой публикации (для поднятых записей);
subscribed - статус подписки текущего пользователя на дискуссию в записи;

@темы: method=post.get

08:17 

quirischa
администратор
(с капибарой на аватарке)
umail.get_folders

[+]

Запросы также кэшируются раз в 3 минуты.

Ответ
folders2 - список папок состоящий из идентификатора, названия и общего количества писем


[*]

Ответ
folders - список папок, состоящий из идентификатора и названия (оставлена для совместимости)

@темы: method=umail.get_folders

09:55 

АльКорд
Метод 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

20:03 

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

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

11:38 

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

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

21:28 

АльКорд
Совершенно нет возможности получить абсолютно все параметры, которые задавались при создании поста. Для постов есть CRUD, однако, чтобы заполнить update-форму теми же значениями, что задавались при создании, не хватает чуть ли не доброй половины параметров:

[no_comments] - без коментариев;
[no_smile] - без смайлов;
[access_list] - список доступа - логины через \n;
[br_replace] - заменять на переносы строки;
[current_music] - музыка;
[current_mood] - настроение;
[poll_title] - голосование - вопрос;
[poll_answer_{0..9}] - голосование - ответы;
[poll_end] - завершить голосование;
[poll_del] - удалить голосование;
[poll_multiselect] - голосование - многовариантыный;
[atags] - авто-темы, темы выделяются из текста записи автоматически по шаблону @[тема];
[changedate] - сделать запись новой;
[attachment] - прикрепленное изображение.

Пожалуйста, введите новый метод post.src (или нечто подобное), который вернет все параметры, что задавались при post.create. Естественно, только для автора поста.

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

21:20 

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

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

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

00:07 

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

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

15:45 

АльКорд
Найден очень серьезный недочет в работе комментариев, конкретно метода comment.get: метод возвращает все комментарии у записи (или 100, нет возможности проверить), нет возможности выставить limit (или иметь уже выставленный, как в post.get, где он равен 20). Если их вдруг придет 100 штук, да даже 50, то, во-первых, это потребует слишком много траффика, во-вторых, слишком много времени у JSON-парсера и последующего заполнения листа с моделями комментариев, в-третьих, слишком много графических ресурсов для отображения всех пришедших комментариев. Сейчас есть поле from у метода, однако, в контексте таких выборок без пагинаций, он совершенно бесполезен.

Сделайте, пожалуйста, настраиваемый лимит (или, хотя бы, предопределенный).
А если еще и у метода post.get сделаете настройку лимита, то будет просто совсем шикарно =)

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

17:46 

Самопроизвольное удаление голосования в post.update

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

1. post.update не должен изменять состояние голосования, если никаких параметров не передано.
2. Если в post.update передан пустой текст записи и не переданы параметры голосования, но в записи уже присутствует голосование, не выдавать ошибку "вы не ввели текст записи", а сохранять остальные переданные параметры (например, теги).
3. В ответ post.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

@API

главная