Вдигна се известно количество шум покрай edno23.com след p2p конференцията и няколко човека проявиха интерес да ползват API-то на edno23. Тъй като въпросното API предлага само базова функционалност и не е доизпипано, все още не сме го пуснали публично. Затова в тази тема ще обясня накратко що за животно е и как се ползва и ще съм много благодарен на всякакъв фийдбек.

Държа да уточня две важни неща обаче:
1. Функционалността на API-то е и ще бъде ограничена. Ако всичко може да се прави през API-то, тогава самият сайт като сайт ще бъде излишен, което не е целта на занятието :)
2. API-то има ограничения за брой заявки в секунда, минута, час, ден и др., както и в количеството върнати данни.

Към момента API-то се състои от три основни части:
1. Интерфейс за извличане на информация – адресът е: http://edno23.com/api/xml/get.php
2. Интерфейс за публикуване на съобщения – адресът е: http://edno23.com/api/xml/post.php
3. Интерфейс за проследяване на потребители – адресът е: http://edno23.com/api/xml/follow.php
4. Интерфейс за проверка на потребител и парола – адресът е: http://edno23.com/api/xml/usercheck.php

Към тези адреси се изпращат стандартни GET и POST заявки, информацията се връща в XML формат. За нещата, които изискват логване с потребителско име и парола, се използва базова http автентикация. По-надолу ще се опитам да обясня горе-долу кое как работи.


Част 1: Извличане на информация

  • Как да вземем всички хора, които следят даден потребител в edno23.com:
    Изпращаме GET заявка по следния начин:
    http://edno23.com/api/xml/get.php?username=Nick&type=followers
    В примера на мястото на Nick се поставя съответното потребителско име. При евентуална грешка скриптът ще върне съобщение от сорта на:

    <?xml version=”1.0″ encoding=”UTF-8″ ?>
    <edno23>
            <status>ERROR</status>
            <errmsg>Invalid user еди-кой-си</errmsg>
    </edno23>

    Списъкът с исканите потребители се връща в следния вид:

    <?xml version=”1.0″ encoding=”UTF-8″ ?>
    <edno23>
            <status>ОК</status>
            <users>
                    <user>
                                <username>Manuel</username>
                                <profile>http://manuel.edno23.com</profile>
                                <avatar>1223583067_13508.png</avatar>
                    </user>
                    <user>
                                <username>pesho</username>
                                <profile>http://pesho.edno23.com</profile>
                                <avatar>1240398685_99536.png</avatar>
                    </user>
                    ….
            </users>
    </edno23>

    За всеки потребител се връща: потребителско име, линк към профила му, аватар. Аватарът е само името на файла – преди него трябва да се постави пътят към директорията, съответстваща на искания от вас размер:
    http://img.edno23.com/avatars/името-на-файла.png – за картинки с размер 150х150 пиксела;
    http://img.edno23.com/avatars/thumbs/името-на-файла.png – за картинки с размер 50х50 пиксела;
    http://img.edno23.com/avatars/thumbs2/името-на-файла.png – за картинки с размер 16х16 пиксела.

  • Как да вземем всички хора, които даден потребител следи в edno23.com:
    Изпращаме GET заявка по следния начин:
    http://edno23.com/api/xml/get.php?username=Nick&type=following
    Информацията се връща по същия начин, както в по-горния пример.
  • Как да вземем по-подробна информация за даден потребител:
    Изпращаме GET заявка по следния начин:
    http://edno23.com/api/xml/get.php?username=Nick&type=userinfo
    Информацията се връща в следния вид:

    <?xml version=”1.0″ encoding=”UTF-8″ ?>
    <edno23>
            <status>ОК</status>
            <userinfo>
                    <username>Nick</username>
                    <avatar>1202566935_12345.jpg</avatar>
                    <fullname>Никола Павлов</fullname>
                    <website>http://nickpavlov.net</website>
                    <tags>пловдив, edno23, bgdev, web, php, javascript, тениски, бира, clixpy</tags>
                    <city>Пловдив</city>
                    <age>21</age>
                    <gender>m</gender>
                    <about>жик-так</about>
            </userinfo>
    </edno23>

  • Как да вземем съобщенията от приятелите на даден потребител:
    Това са постовете, които можете да видите в edno23 в таба “С приятели”. Само че API-то връща само последните 50 поста. Изпращаме GET заявка по следния начин:
    http://edno23.com/api/xml/get.php?username=Nick&type=following_posts
    Информацията се връща в следния вид:

    <?xml version=”1.0″ encoding=”UTF-8″ ?>
    <edno23>
            <status>ОК</status>
            <posts>
                    <post>
                            <url>http://nick.edno23.com/view/post:225218</url>
                            <user_from>Nick</user_from>
                            <user_to></user_to>
                            <message>Тук е съдържанието на поста</message>
                            <attached_link>Ако има прикачен линк, той е тук</attached_link>
                            <attached_image>Ако има прикачена картинка, тук е адреса й</attached_image>
                            <attached_video>Ако има видео, линкът е към сайта-източник</attached_video>
                            <user_from_avatar>1202566935_12345.jpg</user_from_avatar>
                            <user_to_avatar></user_to_avatar>
                    </post>
                    <post>
                            …по същия начин
                    </post>
                    <post>
                            …по същия начин
                    </post>
                    ….
            </posts>
    </edno23>

  • Как да вземем съобщенията, съдържащи @еди-кой-си:
    Това са постовете, които можете да видите в edno23 в таба “@Моят-никнейм”. Само че API-то връща само последните 50 поста. Изпращаме GET заявка по следния начин:
    http://edno23.com/api/xml/get.php?username=Nick&type=posts_mention_me
    Информацията се връща по същия начин, както в по-горния пример.
  • Как да вземем всички директни съобщения, които даден потребител е изпратил:
    Изпращаме GET заявка по следния начин:
    http://edno23.com/api/xml/get.php?username=Nick&type=direct_posts_from_me
    Тук първо се изисква http автентикация – трябва да се прати същото потребителско име и паролата му. След това информацията се връща по същия начин, както в по-горния пример, само че таговете user_from и user_to съдържат съответно изпращача и получателя на съобщението.
  • Как да вземем всички директни съобщения, които даден потребител е получил:
    Изпращаме GET заявка по следния начин:
    http://edno23.com/api/xml/get.php?username=Nick&type=direct_posts_to_me
    Тук първо се изисква http автентикация – трябва да се прати същото потребителско име и паролата му. След това информацията се връща по същия начин, както в по-горния пример, само че таговете user_from и user_to съдържат съответно изпращача и получателя на съобщението.


Част 2: Публикуване на съобщения

За публикуване на съобщения е нужно приложението ви да се регистрира в системата на edno23, което може да стане като ми пишете на nikola.pavlov@gmail.com (по-нататък процесът най-вероятно ще бъде автоматизиран). Ще получите две неща – api id и api password. Когато извиквате апито и му пращате съобщение, трябва тези две неща да бъдат постнати заедно с останалата информация, както е посочено по-долу. Освен това се изисква базова http автентикация – трябва да се изпрати потребителското име и паролата на потребителя, от чийто акаунт се поства.

Съобщенията са два вида – публични и лични (директни). Вероятно от edno23 знаете каква е разликата между двете. Що се отнася до интерфейса за постване, единствената разлика е, че при лично съобщение трябва да се посочи никнейма на получателя.

И така, за да постнете нещо през апито, трябва да изпратите следните неща с POST-метод към адрес
http://edno23.com/api/xml/post.php:

  • api_id и api_pass – по-горе е обяснено как да ги получите;
  • message – Текст на съобщението (до 160 символа); Ако текстът е празен, ще бъде върната грешка.
  • attached_link – Ако желаете да прикачите линк, трябва да е тук. Ако линкът не е валиден, ще бъде върната грешка;
  • attached_image – Ако желаете да прикачите картинка, адресът й трябва да е тук. Ако картинката не може да бъде качена, ще бъде върната грешка;
  • attached_video – Ако желаете да прикачите видео (embed от видео-сайт), тук трябва да е адресът или ембед-кодът. Ако видеото не може да бъде прочетено или е от сайт, който системата не поддържа, ще бъде върната грешка. За момента поддържаните видео-сайтове са: youtube.com, metacafe.com, myspace.com, vimeo.com, revver.com, vbox7.com, dtrailer.com и др. Важно: към един пост не могат да се прикачат едновременно картинка и видео;

Ако всичко е наред по входните данни, както и по автентикацията, съобщението ще бъде публикувано и ще бъде върнат следният XML:

<?xml version=”1.0″ encoding=”UTF-8″ ?>
<edno23>
        <status>ОК</status>
        <url>ако съобщението е публично, тук ще е линкът към него</url>
</edno23>

При възникване на грешка съобщението се връща както в най-горния пример за грешка.


Част 3: Проследяване на потребители

Първо се изисква базова http автентикация – трябва да подадете потребителското име и паролата на потребителя, чийто акаунт ще използвате. След това:

  • Как да започнем да следим някого:
    Изпращаме GET заявка по следния начин:
    http://edno23.com/api/xml/follow.php?username=Nick&state=1
    Връща се следното съобщение:

    <?xml version=”1.0″ encoding=”UTF-8″ ?>
    <edno23>
            <status>ОК</status>
    </edno23>

  • Как да спрем да следим някого:
    Изпращаме GET заявка по следния начин:
    http://edno23.com/api/xml/follow.php?username=Nick&state=0
    Връща се съобщение както по-горе.


Част 4: Проверка на потребител и парола

На това нещо целта му е примерно ако желаете в даден сайт да използвате акаунтите от edno23. Към адрес http://edno23.com/api/xml/usercheck.php трява с POST да подадете параметри username и password и скриптът ще ви отговори дали има такъв акаунт с тази парола
Ако няма такъв акаунт или е сбъркана паролата, апито връща стандартно съобщение за грешка като показаните по-горе. Възможно е да получите и грешка “Flood Restriction” – ако се получат повечко заявки за един и същ потребител в кратък интервал от време. Ако всичко е наред, получавате xml резултат със status OK и таг userinfo, който съдържа данните за потребителя по същия начин, както по-горе в get.php.

Ами това е в общи линии :) Предстои да се правят разни нови неща, ако има нещо, пишете ми :)

Сподели в edno23

Tags: ,

20 Responses to “Неофициално Edno23.com API”

  1. n@sk0 says:

    Cool…много добър пост, евала ;)

  2. Hamaelleon says:

    Мда, определено ще се ползва :)
    Става ли, да кажем, че вече съм ти писал писмо и съм си заявил api id и api password, имаш ми мейла :)

  3. Марио Пешев says:

    Днес се регнах изобщо в 123 и ми беше крайно интересно защо паролата е в plain text… Добре, че не използвам важни пасове за такива системи.

  4. Nick says:

    Видях публикацията в блога ти. Доста е тъпо от твоя страна да си правиш такива изводи, че и да плюеш публично, без да си сигурен. Паролите се хешират, мога да ти докажа ако настояваш. Просто преди да се запише в базата се праща по мейл, какво толкова странно и необичайно виждаш в това ?

  5. Марио Пешев says:

    В блогпоста не съм писал, че се записва в базата в чист вид – точно предвид възможността да се записва чисто чак след това. Но не смятам за правилен подход да се праща и по мейл – затова съществуват и input password полетата със звездички, за да не се вижда от някой край теб. Ако влезеш в пощата и случайно си отвориш мейла, на всички ще бъде ясно за какво иде реч.

    П.С. Имам абсолютно неутрално мнение към системата и добро впечатление от теб конкретно – затова просто информирам за това, което съм видял, и давам съвет тук.

  6. Nick says:

    Благодаря за отговора и съвета. В моите очи това да се праща парола по мейл не е проблем, то си е практика (макар най-чесно да се ползва при забравена парола за генериране и пращане на рандомска нова).

  7. Марио Пешев says:

    Давам ти пример: в кафенето на университета съм, пия си кафето и се регистрирам. Около мен – народ, проверявам си пощата и отварям съобщението за регистрация. Предполагам, че вътре има tips and tricks или някакви други неща за системата, освен благодарственото писмо, че съм се регнал. Затова и не очаквам да има парола вътре :)

    Отново no offence, но да си видиш така паролата може конкретно да бъде опасно. Подобно на идиотщината (IMHO) на cPanel с добавяне на потребител и база от данни, описани в блога на jeckyll.

  8. Nick says:

    То тогава трябва идентификацията да става по пръстов отпечатък, някой може да ти наднича какво пишеш въпреки звездичките, ако ще разписваме възможните казуси :) Разбирам какво имаш предвид де, просто се учудвам, че такова нещо, което се ползва на толкова места, ти прави впечатление. Въпросът е интересен, може би си заслужава да се пусне отделна дискусия по темата. Peace :)

  9. Марио Пешев says:

    Част от работата ми е свързана със security одит, може да е професионално изкривяване. Мир да има. :)

  10. Марио Пешев says:

    Offtopic: Впрочем, миналата седмица в Брюксел разбихме един фингърпринт, така че и това не е вариант :)

  11. Стойчо М says:

    Преди време платих $80 на един сайт за една услуга (теми за Wordpress). Изпратиха ми паролата в plain text. Без да се замисля, отидох и отмених регистрацията и им писах защо я отменям.

  12. Karaman says:

    :) аман от параноици! :)

    Ник, поздравления! Много се радвам за API-то на edno23.com
    Остава някой да напише и GUI клиент!
    Пожелавам ви да задминете и **twitter** по функционалност!

  13. Mitko says:

    @Karaman
    GUI е най-лесното, ако има сносно API. Аз обаче не мога да разбера идеята “1. Функционалността на API-то е и ще бъде ограничена. Ако всичко може да се прави през API-то, тогава самият сайт като сайт ще бъде излишен, което не е целта на занятието”. Edno23.com сайт ли е, услуга ли е ?

  14. Любомир Петров says:

    Nick, Марио е прав…
    Има редици причини (от гледна точка security) пароли да _не_ се изпращат по мейл. (чак сега забелязвам, че и вие изпращате по този начин)
    Мога да изредя много такива, но (както винаги) някой ще ме нарече и мен параноичен.

    Както ти сам спомена, изпращат се основно временни пароли, такива които нямат нищо общо с потребителските (non-temporary) такива.

    Както и да е (не че не е важно…но имам друг въпрос).. обмисляте ли да пуснете API за user search-a. Конкретно ме интересува търсене по ключови думи :)

    Също ми е интересно “get.php” API-то има ли лимит, защото ми хрумна супер яка идея за приложение, но трябва да знам как да конфигурирам cраwl-a :)

  15. Мартин says:

    Много браво!

  16. Краси says:

    Тъпо. Не разбирам какъв е проблема да се праща парола на мейла. В ранните (ако не се лъжа) версии на phpBB се пазеше в plain text. Мене не ми е ясно и друго — защо псевдо разбирачите постоянно говорят за md5…сякаш има само md5. Явно толкова и разбират, що изобщо не се сещат, че обикновено повечето приложения “насоляват” md5. Не, че това би спряло някой да открадне всички пароли ако си го навие. Изобщо…няма смисъл да задълбавате в такива неща. Ако някой си забрави някъде паролата — пращат му нова, която на мейла идва в plain text, а в базата си се записва И насолена. Ех, от колко време ми се върти в главата една статия именно за паролите…

    Ник, няма смисъл да се занимаваш и да обясняваш.

    Поздрави, Краси.

  17. Любомир Петров says:

    Скоро ще има ли опция за follow/unfollow към write API-то ? :)

  18. peter says:

    Айде – нов uP123 вече с follow/unfollow

  19. Nick says:

    Добавих още едно нещо към API-то – точка 4.

  20. Свилен Попов says:

    Мерси относно проверката на потреб. име и парола :)

Leave a Reply



Recently Commented