Конференция "Журнал" » протокол клиента (предварительная версия)
 
  • Ketmar © (19.10.06 03:24) [0]
    Gero, это первая прикидка. все вместе поправим, потом выложим финальный вариант. а эту ветку грохнем. %-) пинки и правки сильно приветствуются.

    я решил не разделять всё на отдельные ветки -- имо, смысла в этом мало.

    основано на версии от 18.02.02. дополнения -- Gero, Ketmar.
    оформление в более-менее читабельный текст -- Ketmar.
    -----------------------------------------------------------------------------

    ответы скрипта
    ~~~~~~~~~~~~~~
    скрипт возвращает данные в переменных. выглядит это так:
    name=value<tab>name=value<tab>...
    <tab> -- это символ #9.

    в первой строке ответа всегда находится или
    ERROR=текст сообщения об ошибке по-русски
    или
    Allcount=x
    при ERROR всё очевидно -- кирдык. Allcount же показывает, сколько строк
    данных вернул скрипт. что находится в строках данных -- зависит от запроса.
    x -- это целое число.

    имена переменных лучше проверять не обращая внимания на регистр.

    запросы
    ~~~~~~~
    1. Запрос о доступных конференциях
    http://www.delphimaster.ru/cgi-bin/client.pl?getforums=1
    переменные в ответах:
     n=x
     title=str
     dsc=str

    n: номер конференции (в дальнейшем используется везде, где нужно
      подставлять "n=")
    title: краткое название конференции
    dsc: развёрнутое описание конференции

    пример ответа:
    Allcount=2
    n=0 title=Общие вопросы dsc=любые вопросы по программированию в Дельфи
    n=1 title= Вопросы по базам данных  dsc=любые вопросы по использованию и программированию БД

    2. Запрос о новых заголовках
    http://www.delphimaster.ru/cgi-bin/client.pl?getnew=lastmod&n=0
    Где lastmod=-1 в первом случае, в последующих он его получает от самого скрипта
    n - номер конференции

    id: идентификатор ветки
    name: имя задавшего вопрос
    email: email задавшего вопрос
    title: заголовок вопроса
    count: число ответов
    answers: список ников, ответивших на вопрос
            (ники разделены ", "; следует заметить, что присылаются не
             ники всех, кто ответил, а только несколько последних;
             это поле только визуально-информативное -- посмотрите на сайт,
             увидите)
    dsc: краткое описание самого вопроса (то, что вы видите серым цветом
        на каждой странице в форумах)
    date: дата последнего ответа (как хранятся даты -- я опишу позже)
    lastmod: дата последнего ответа в формате понятном скрипту.
    vd: Версия Delphi, какая БД и т.д. То что в форуме выводится красненьким :) [D5, Win2k]
    loginid: номер анкеты спрашивающего. если 0 -- юзер не зарегистрирован.

    пример ответа:
    Allcount=2
    id=992553967    name=Adoliks    title=Рисование таблиц в Word средствами Delphi answers=Shtukos email=guru@nord.ptt.ru  count=1 dsc=Господа, подскажите, как из-под Дельфей нарисовать таблицу в Ворде и вставить в неё текст. Просто экспорт текста делал ...  date=24.06.01 23:36 lastmod=992554939 vd=D2, IB4.x  loginid=997732577
    id=992553968    name=Merlin . . .

    замечу, что как в name, так и в title могут быть html-тэги. это надо учитывать при
    разборе и выводе.
  • Ketmar © (19.10.06 03:24) [1]
    3. Запрос о полной информации о ветви
    http://www.delphimaster.ru/cgi-bin/client.pl?getconf=id&n=0&from=0&to=-1
    Где: id - номер запрашиваемой ветви
    n - номер конференции
    from - с какой позиции выдавать ответы.
    Если мы ранее уже получали эту ветвь, то нет необходимости грузить все еще раз,
    потому запрашиваем только то, что после.
    Если это первый запрос, то from=0
    to - до какой позиции выдавать ответы. Если указано -1, то все до конца.
    Если from=to, то выдается один ответ. На первом месте from=to=0 находится сам вопрос.

    возвращает просто строку с html-кодом. если надо из неё добыть разные поля -- строку
    следует "разобрать на кусочки". %-)
    примечания по разбору:
     начального {<a href="mailto} может и не быть, если юзер не указал мыло.
     после ника может идти
    {<a href="http://www.delphimaster.ru/cgi-bin/anketa.pl?id=1125495517" target=_blank>©</a>}
     это значок (c). но может и  не идти, если юзер не зарегистрирован.
     также перед "©" может стоять {<font color} -- для "штанов особого цвета".
     текст ответа всегда начинается с тэга {<p}. заканчивается, соответственно, {</p>}

     если в тексте ответа встретилось {<font color=red>} -- это значит, что ответ
     удалён модератором. в тэгах {<small>}...{</small>} следует камент модератора.
     если встретилось {<font color="#} (это может быть и после камента модератора на
     удалённый пост!) -- ветка помечена "синим карандашиком".

     примерно так.

    пример ответа:
    Allcount=2
    <a href="mailto:zeerg@chat.ru">ZEE</a>   <font color=green><small>(22.06.01 11:13)</small></font><p style="margin-left: 20; margin-right: 20">Народ, помогите с фильтрацией в SQL по дате.<br>Ну то есть выводить записи, в которых значение поля дата лежит в пределах от "одна дата" до "другая дата".</P>
    <a href="mailto:udb@mailru.com">Deniz</a>   <font color=green><small>(22.06.01 12:33)</small></font><p style="margin-left: 20; margin-right: 20">Лучше с параметрами:<br>Query1.SQL.Clear;<br>Query1.SQL.Add('select * from table');<br>Query1.SQL.Add('where (date1 >=:param1)');<br>Query1.SQL.Add('and (date1 <=:param2)');<br>Query1.Prepare;<br>Query1.ParamByName('param1').asDateTime:= ...<br>Query1.ParamByName('param2').asDateTime:=...<br>Query1.Open;</P>

    5. Данные анкеты.
    http://www.delphimaster.ru/cgi-bin/client.pl?anketa=id
    id - идентификатор юзера
    Ответ сервера:
    id -- id анкеты
    login -- ник
    sex -- "Мужской"/"Женский" (я проверяю по первой букве, не учитываю регистр)
    name
    hobby
    homepage
    city
    about
    education
    date -- когда зарегистрировался
    email
    0day -- день рождения
    icq

    в hobby и about может быть html-текст.

    даты -- в обычном формате (см. ниже).
  • Ketmar © (19.10.06 03:24) [2]
    6. Есть опасения, что с введением данного клиента резко упадет посещаемость самого сайта,
    а значит и наша позиция в рейтингах, что только отрицательно отразится на его популярности.
    Поэтому прошу в клиенте при запросе новых вопросов в конференции вызывать и счетчик,
    лишние 200 байт погоды не сделают, а польза будет большая.
    URL счетчика можно узнать так:
    http://www.delphimaster.ru/cgi-bin/client.pl?counter=1
    меняться он будет редко, так что перепрочитывать его стоит не чаще чем раз в неделю.

    пример ответа:
    Allcount=1
    url=http://top.list.ru/counter?id=53505;js=13;r=;j=true;s=800*600;d=16;rand=%rand%  referrer=http://www.delphimaster.ru/forum/index.html

    Здесь вместо %rand% стоит подставить случайное число < 1, например:
    0.18421077203239022
    И просто запросить этот URL, только обязательно !!! укажите referrer.
    Ответ нигде показывать не надо.

    7. Запрос о доступных серверах
    Предполагается, что при первом запуске клиента, он должен по жестко прописанному URL
    (http://www.delphimaster.ru/cgi-bin/client.pl)  запросить список доступных серверов,
    названия и URL-ы клиентов, для получения конф. от них.

    (Ketmar: лично я -- как, полагаю, и все остальные -- этого не делаю)

    http://www.delphimaster.ru/cgi-bin/client.pl?allservers=1

    пример ответа:
    Allcount=1
    name=Мастера DELPHI url=http://www.delphimaster.ru  client=http://www.delphimaster.ru/cgi-bin/client.pl answer=http://pda.delphimaster.net/?answer=1&id=%id&n=%n#answer
    Здесь:
    name - название сервера
    url - адрес самого сайта
    client - URL клиента, от которого и требовать все данные
    answer - формат вызова странички для ответа на вопрос. Т.к. на разных серверах, все возможно будет располагаться в разных местах, то это необходимо. Вам нужно только подставить вместо %id - номер вопроса, вместо %n - номер конференции

    8. Для ведения логов использования клиентов чтения форумов подставляйте во
    _все_ запросы к серверу UserAgent=Название.Версия
    Например:
    http://www.delphimaster.ru/cgi-bin/client.pl?getnew=lastmod&n=0&UserAgent=Название.Версия
    или, можете указывать агента в заголовке запроса, в стандартном поле
    HTTP_USER_AGENT (User-agent: xxx).
    (Ketmar: CDM отрекомендовывается как "CDM_by_Ketmar.X", где X -- версия).

    9. расширеный запрос об ответах:
    http://www.delphimaster.ru/cgi-bin/client.pl?getconf2=id&n=0...
    см. пункт 3. разница: в первой строке кроме переменной Allcount могут быть ещё:
     state:
       =closed: обсуждение закрыто.
       =moved(n,id): перемещена. n -- номер конференции (куда), id -- id ветки
                     (куда).
     del:
       =...: перечисление удалённых веток. перечисление -- это просто числа,
             разделённые запятой. там ещё встречаются пробелы, "+" и "-". лично
             я (Ketmar) не знаю, что они значат, потому просто игнорирую.
             число -- это номер ответа (как обычно: 0 -- ответ, и далее по возрастанию).
     pen:
       =...: ветки, помеченые "карандашиком". формат аналогичен "del".

     стоит учесть, что у вышеуказаных переменных могут быть и пустые значения.

    к этому запросу можно добавлять "&list=2,3,7-9", например. что вернёт информацию
    только об указаных ветках (обратим внимание на возможность указывания диапазонов).

     Максим рекомендует сделать галку, которая отключит запросы "getconf2". также при
    ошибке можно запросить просто "getconf", а только потом упасть.
  • Ketmar © (19.10.06 03:26) [3]
    ангелы! ну какое, блин, ограничение-то? 4 кила? 6? 8? 2? или опытным путём выяснять? %-)
  • Gero © (19.10.06 06:14) [4]
    > перечисление -- это просто числа,
    >         разделённые запятой. там ещё встречаются пробелы,
    > "+" и "-". лично
    >         я (Ketmar) не знаю, что они значат, потому просто
    > игнорирую.
    >         число -- это номер ответа (как обычно: 0 -- ответ,
    > и далее по возрастанию).

    Пробелов там не встречается.
    + возле цифры ставится, если удален не только текст сообщения, но и ник.
    - на данный момент быть не может, но ситуация, надеюсь, вскоре изменится, так как это диапазон, который Максим почему-то не прикрутил, хотя я был уверен, что прикрутил.
  • Gero © (19.10.06 06:15) [5]
    Все, голова отказала. Ушел спать.
  • Ketmar © (19.10.06 06:19) [6]
    с "+" ясно. пробелы... мог и пролажать, не спорю. минус видел лично где-то. долго думал.
  • Gero © (19.10.06 12:50) [7]
    > [6] Ketmar ©   (19.10.06 06:19)

    В любом случае, это диапазон. Лучше описать, что он может быть, думаю.
  • Anatoly Podgoretsky © (19.10.06 18:25) [8]

    > Ketmar ©   (19.10.06 03:26) [3]
    > ангелы! ну какое, блин, ограничение-то? 4 кила? 6? 8? 2?
    >  или опытным путём выяснять? %-)

    Официально 5000 символов.
  • Ketmar © (20.10.06 18:13) [9]
    >[7] Gero(c) 19-Oct-2006, 12:50
    >В любом случае, это диапазон. Лучше описать, что он может
    >быть, думаю.
    угу. поправлю.

    >[8] Anatoly Podgoretsky(c) 19-Oct-2006, 18:25
    >
    >> Ketmar ©  (19.10.06 03:26) [3]
    >> ангелы! ну какое, блин, ограничение-то? 4 кила? 6? 8? 2?
    >>  или опытным путём выяснять? %-)
    >
    >Официально 5000 символов.
    как выяснил опытным путём -- 7 килобайт. в клиенте ограничу пятью. на всякий случай. %-)
  • Gero © (20.10.06 18:14) [10]
    > [8] Anatoly Podgoretsky ©   (19.10.06 18:25)

    Откуда такая информация?
  • Anatoly Podgoretsky © (20.10.06 18:28) [11]
    В свое время Максим говорил да и скрит сообщал.
  • Anatoly Podgoretsky © (20.10.06 18:29) [12]
    А вот и текущее ограничение, видимо Максим добавил

    > Вы пытаетесь записать слишком длинное сообщение. Макс. ограничение
    > на 7168 символов.
  • Ketmar © (20.10.06 18:49) [13]
    угу. я уже выяснил путём флуда. %-)
  • Янис Прасол © (20.10.06 18:55) [14]
    > [13] Ketmar ©   (20.10.06 18:49)

    Это было заметно в остальных конференциях :)
  • Ketmar © (20.10.06 18:58) [15]
    >[14] Янис Прасол(c) 20-Oct-2006, 18:55
    >Это было заметно в остальных конференциях :)
    на самом деле я просто клиента тестирую, но тс-с-с-с! %-)
  • Anatoly Podgoretsky © (20.10.06 21:38) [16]
    Кстати решил проблему чистки базы с помощью getconf2 - если сообщение попадает в выборку, то все удаленые сообщения чистятся.
    Максим проявился, но пока он очень занят.
 
Конференция "Журнал" » протокол клиента (предварительная версия)
Есть новые Нет новых   [134427   +35][b:0][p:0.001]