Как получить аватар пользователя через API
|
|
[1] likbezz [08.11.2013, 02:50] |
Как получить аватар пользователя через API
Собственно, простенький пример по теме: Ликбезз по юкоз API. Получаем ссылку на аватар или любые данные, по примеру, доступные из API.
Собственно, все просто. Совершается запрос на страницу пользователя: Код http://likbezz.ru/api/index/8-1 Где: - последняя цифра == ID пользователя, в данном случае - 1 ---
Примечание: Если гостям запрещено просматривать профиль, то данные будут недоступны. Если нужно получить данные текущего пользователя - того сто смотрит страницу, то можно делать запрос просто на адрес: Код http://likbezz.ru/api/index/8 - адрес профиля текущего пользователя. ---
Вот такой простенький листинг: Код <span id="apiCont"></span> <script type="text/javascript"> $.get('/api/index/8',function(d,b,c){ var cont=$('#apiCont'),name=$('name',d); if(c.status!='200'){return cont.html('<b style="color:#F33;">Извините, но произошла ошибка: «'+c.status+'» '+c.statusText+'!</b>');} for(i=0,j=name.size();i<j;i++){ var element=$(name[i]); if(element.text()=='USER_AVATAR'){ //alert($('string',element.parent()).text()); cont.html('<img src="'+$('string',element.parent()).text()+'" />'); } } }); </script> Где: Код <span id="apiCont"></span> - блок куда выводится данные - аватар или сообщение об ошибке.
Код if(c.status!='200'){return cont.html('<b style="color:#F33;">Извините, но произошла ошибка: «'+c.status+'» '+c.statusText+'!</b>');} - проверка на положительность запроса, не обязательная функция, но имеет место быть. При ошибке выводит код ошибки и статус.
Код for(i=0,j=name.size();i<j;i++){ var element=$(name[i]); if(element.text()=='USER_AVATAR'){ //alert($('string',element.parent()).text()); cont.html('<img src="'+$('string',element.parent()).text()+'" />'); } } - проходимся циклом по всем тегам «name» выискивая нужный нам блок, и как только значение будет == «USER_AVATAR» берем из тега «string» родительского блока значение - оно и будет ссылкой на аватар.
Код cont.html('<img src="'+$('string',element.parent()).text()+'" />'); - выводим аватарку в блок. ---
☑ Пример: http://likbezz.ru/_example/_api/2013/get_api_user_avatar.html |
|
[2] likbezz [08.11.2013, 03:07] |
Если вы точно знаете, а узнать достаточно просто - надо всего лишь посчитать кол-во элементов до нужного значения. Сейчас покажу. Допустим данные пользователя. Ответ сервера вот такой: Код <methodResponse> <params> <param> <value><struct> <member><name>USER_ID</name><value><i4>1</i4></value></member> <member><name>USER_PROFILE</name><value><string>http://likbezz.ru/index/8-1</string></value></member> <member><name>USER_GROUPID</name><value><i4>4</i4></value></member> <member><name>USER_GROUPNAME</name><value><string>Администраторы</string></value></member> <member><name>USER_USERNAME</name><value><string>likbezz</string></value></member> <member><name>USER_NAME</name><value><string>Anton</string></value></member> <member><name>USER_GENDER</name><value><string>1</string></value></member> <member><name>USER_AVATAR</name><value><string>http://likbezz.ru/avatar/41/810935.gif</string></value></member> <member><name>USER_EMAIL</name><value><string>fflesh3@mail.ru</string></value></member> <member><name>USER_ISVERIFIEDEMAIL</name><value><i4>1</i4></value></member> <member><name>USER_HOMEPAGE</name><value><string>http://likbezz.ru/</string></value></member> <member><name>USER_COUNTRY</name><value><string>Российская Федерация</string></value></member> <member><name>USER_CITY</name><value><string>Москва</string></value></member> <member><name>USER_ICQ</name><value><string>313615211</string></value></member> <member><name>USER_AOL</name><value><string/></value></member> <member><name>USER_MSN</name><value><string/></value></member> <member><name>USER_YAHOO</name><value><string/></value></member> <member><name>USER_BIRTHDAY</name><value><string>25 Апреля 1982</string></value></member> <member><name>USER_ZODIAC</name><value><string>Телец</string></value></member> <member><name>USER_AGE</name><value><i4>31</i4></value></member> <member><name>USER_IPADDRESS</name><value><string>83.167.116.180</string></value></member> <member><name>USER_BANNEDTILL</name><value><string/></value></member> <member><name>USER_RANK</name><value><string>10</string></value></member> <member><name>USER_RANKNAME</name><value><string>Генералиссимус</string></value></member> <member><name>USER_REPUTATION</name><value><string>386</string></value></member> <member><name>USER_AWARDS</name><value><i4>0</i4></value></member> <member><name>USER_REGTIMESTAMP</name><value><i4>1220743043</i4></value></member> <member><name>USER_LOGTIMESTAMP</name><value><i4>1383862918</i4></value></member> <member><name>USER_STATUS</name><value><string/></value></member> <member><name>USER_UNETPROFILE</name><value><string/></value></member> <member><name>USER_UNETID</name><value><i4>0</i4></value></member> </struct></value> </param> </params> </methodResponse>
Как можно заметить все данные содержаться в теге «string».
Так вот, если вам надо получить значение какого-то одного или нескольких полей, совершенно необязательно перебирать циклом все, можно просто указать порядковый номер этого поля.
Например, тот же аватар: Листинг: Код <span id="apiCont"></span> <script type="text/javascript"> $.get('/api/index/8',function(d){ var cont=$('#apiCont'),string=$(d.getElementsByTagName('string')[5]).text(); if(string.length>10){ cont.html('<img src="'+string+'" alt="" />'); } }); </script>
Где: Код <span id="apiCont"></span> - блок для вывода данных.
Код string=$(d.getElementsByTagName('string')[5]).text(); - сразу получаем содержание 5-го элемента «string» который отвечает за аватар.
- проверяем наличие аватара - ведь его может и не быть )
Код cont.html('<img src="'+string+'" alt="" />'); - выводим в блок картинку с адресом аватарки текущего пользователя. ---
☑ Пример: http://likbezz.ru/_example/_api/2013/get_api_user_avatar_eq.html ... |
|
[3] likbezz [08.11.2013, 03:22] |
Таким же образом можно получить и Имя пользоателя, и пол и тп и тд - все то что доступно с данной страницы.
Листинг: Код <span id="apiCont"></span> <script type="text/javascript"> $.get('/api/index/8',function(d){ var cont=$('#apiCont'),elements=d.getElementsByTagName('string'),html='', avatar=$(elements[5]).text(), username=$(elements[2]).text(), gender=$(elements[4]).text(), city=$(elements[9]).text(); html+='Привет: <b>'+username+'</b><br />'; if(gender.length>0){ gender=(gender=1?'ты мужик':'вы девушка') html+='Поздравляю, '+gender+'<br />'; }; if(avatar.length>0){ html+='Твой аватар: <br /><img src="'+avatar+'" alt="" /><br />'; }; if(city.length>0){ html+='Твой город: '+city+'<br />'; }; cont.html(html); }); </script>
Имеем:
---
☑ Пример: http://likbezz.ru/_example/_api/2013/get_api_user_avatar_over.html ..
Если нет автара, или любого значения другого поля, по подобию, правим скрипт так: Код <span id="apiCont"></span> <script type="text/javascript"> $.get('/api/index/8',function(d,b,c){ var cont=$('#apiCont'),name=$('name',d); if(c.status!='200'){return cont.html('<b style="color:#F33;">Извините, но произошла ошибка: «'+c.status+'» '+c.statusText+'!</b>');} for(i=0,j=name.size();i<j;i++){ var element=$(name[i]); if(element.text()=='USER_AVATAR'){ if($('string',element.parent()).text().length>10){ cont.html('<img src="'+$('string',element.parent()).text()+'" />'); }else{ cont.html('<img src="свою_сылку" />'); } } } }); </script>
То бишь, вешаем проверку на наличие символов в поле Вот в этом месте:
Код if(element.text()=='USER_AVATAR'){ if($('string',element.parent()).text().length>10){ cont.html('<img src="'+$('string',element.parent()).text()+'" />'); }else{ cont.html('<img src="свою_сылку" />'); } }
Или покороче чуть: Код <span id="apiCont"></span> <script type="text/javascript"> $.get('/api/index/8',function(d,b,c){ var cont=$('#apiCont'),name=$('name',d); if(c.status!='200'){return cont.html('<b style="color:#F33;">Извините, но произошла ошибка: «'+c.status+'» '+c.statusText+'!</b>');} for(i=0,j=name.size();i<j;i++){ var element=$(name[i]); if(element.text()=='USER_AVATAR'){ cont.html('<img src="'+(($('string',element.parent()).text().length>10)?$('string',element.parent()).text():'свою_сылку')+'" />'); } } }); </script>
|
|
[4] meme22 [14.01.2014, 21:25] |
хорошие примеры, некоторые очень помогли. Застряла только вот где: На странице материалов пользователя не могу вывести логин пользователя того, чьи материалы. Аватар вывела таким скриптом, работает.
Код <script type="text/javascript"> $(function() { var uri = '//' + location.hostname + '/api/index/8-' + window.location.href.split('-')[2] $.get( uri, function ( xml ) { var src = $( xml ).find('name:contains("USER_AVATAR")').next().text(); $('.ava').append('<img src="' + src + '" />'); }) }); </script>
Пытаюсь вывести логин, выводит, но только мой, как администратора, а нужно чтобы выводило тот логин, чьи материалы.
Код <script type="text/javascript"> var url='/api/index/8-$UID$'; $.get(url,function(data){ $('member',data).each(function(){ if(/USER_USERNAME/i.test($(this).text())){ $('<a href="$PROFILE_URL$" title="Профиль">'+$(this).text().split('USER_USERNAME')[1]+'</a>').insertAfter('.username'); };})},'xml'); </script>
с этим не получается, не знаю что и делать((( и еще, почему то ссылка $PROFILE_URL$ выглядит как ссылка на страницу материалов данного пользователя (в моем случае на страницу материалов пользователя каталога сайтов)
Сообщение отредактировал meme22 - Вторник, 14.01.2014, 21:26 |
|
[5] likbezz [14.01.2014, 22:59] |
meme22, Пытаюсь вывести логин, выводит, но только мой, как администратора, а нужно чтобы выводило тот логин, чьи материалы. Вместо: Код var url='/api/index/8-$UID$'; это Код var url='/api/index/8-'+window.location.href.split('-')[2]; ---
и еще, почему то ссылка $PROFILE_URL$ выглядит как ссылка на страницу материалов данного пользователя (в моем случае на страницу материалов пользователя каталога сайтов) - потому что нет такого оператора в данном шаблоне, следовательно, выводится пустая строка. А пустая строка в атрибуте href выглядит как ссылка на текущую страницу. |
|
[6] meme22 [14.01.2014, 23:28] |
спасибо!
потому что нет такого оператора в данном шаблоне, следовательно, выводится пустая строка. А пустая строка в атрибуте href выглядит как ссылка на текущую страницу.
это решаемая задача? наверное с помощью скрипта |
|
[7] likbezz [14.01.2014, 23:37] |
meme22, это решаемая задача? наверное с помощью скрипта Какая задача? получить ссылку на профиль? Пример же выше есть, сделайте по подобию var src = $( xml ).find('name:contains("USER_AVATAR")').next().text(); Код var ссылка_в_профиль = $( xml ).find('name:contains("USER_PROFILE")').next().text(); или username=$(elements[2]).text(), Код userprofile=$(elements[0]).text(), ---
Типа: Код <script type="text/javascript"> $.get('/api/index/8-'+window.location.href.split('-')[2],function(data){ var user_username=false,user_profile=false; $('member',data).each(function(){ if(/USER_USERNAME/i.test($(this).text())){ user_username = $(this).text().split('USER_USERNAME')[1]; }; if(/USER_PROFILE/i.test($(this).text())){ user_profile = $(this).text().split('USER_PROFILE')[1]; }; }); if(user_username&&user_profile){ $('<a href="'+user_profile+'" title="Профиль">'+user_username+'</a>').insertAfter('.username'); }; }); </script> Не проверял.. |
|
[8] meme22 [18.01.2014, 14:50] |
Какая задача? получить ссылку на профиль? да)
Пример же выше есть, сделайте по подобию
разобралась уже, благодарю))
Добавлено (18.01.2014, 14:50) --------------------------------------------- так, со страницей фото пользователя разобралась, теперь застряла на странице материалов дневника. Переменной количества записей там нет, как везде $NUM_ENTRIES$. А как получить со странички такие данные? То есть страница пользователя с его записями в дневнике(блоге) и его количество записей.
В принципе алгоритм понятен, наверное), немного не пойму как посчитать к-ство эл. до нужного значения
Код <script type="text/javascript"> var url='/api/index/46-'+window.location.href.split('-')[5]; $.get(url,function(data){ $('member',data).each(function(){ if(/USERBLOGENTRIES_NUM/i.test($(this).text())){ $('<div class="blogent">'+$(this).text().split('USERBLOGENTRIES_NUM')[1]+'</div>').insertAfter('.userent'); };})},'xml'); </script>
Блин, вобще не пойму что к чему, откуда брать эти данные USERBLOGENTRIES_NUM. На перс.странице api не выводит, на странице материалов тоже нет. Ааааааааа)))
так, что-то нашла) количество заметок можно брать отсюда /api/index/46-*-*-*-* (что под этими звездочками?)
а вот как связать пользователя и кол. заметок, чтобы на странице материалов польз.отображалось именно его кол.заметок
Сообщение отредактировал meme22 - Суббота, 18.01.2014, 23:28 |
|
[9] likbezz [19.01.2014, 01:30] |
meme22, мне не оч понятна вот эта строка: Код var url='/api/index/46-'+window.location.href.split('-')[5]; Что это? Чему должен быть равен url ?
Переменной количества записей там нет, как везде $NUM_ENTRIES$. А как получить со странички такие данные? Это можно сделать информером - счетчики. |
|
[10] meme22 [23.01.2014, 14:17] |
Что это? Чему должен быть равен url ? странице пользователя, чьи материалы.
В общем я не знаю как вывести количество материалов пользователя на странице материалов блога.(иссякли все возможные идеи и мысли) Это можно сделать информером - счетчики.
можно, но не для данного случая.
Еще раз о том, что мне нужно: На странице материалов пользователя (блог) я вывожу аватар и логин пользователя, которому принадлежит данная страница. То есть для каждого она своя. Теперь мне нужно вывести количество всех заметок данного пользователя.
Пример: Страница материалов user1 (/index/8-1) - заметок 5 Страница материалов user2 (/index/8-2) - заметок 12 и т.д. |
|
[11] likbezz [23.01.2014, 22:34] |
meme22, странице пользователя, чьи материалы. А, ошибся, показалось.. но нет, все верно.
Блин, вобще не пойму что к чему, откуда брать эти данные USERBLOGENTRIES_NUM. На перс.странице api не выводит, на странице материалов тоже нет. Ааааааааа))) Ну что вы, все правильно: Код <script type="text/javascript"> $.get('/api/index/46-'+window.location.href.split('-')[5],function(data){ $('member',data).each(function(){ if(/USERBLOGENTRIES_NUM/i.test($(this).text())){ $('<div class="blogent">'+$(this).text().split('USERBLOGENTRIES_NUM')[1]+'</div>').insertAfter('.userent'); };}); }); </script>
брать отсюда /api/index/46-*-*-*-* (что под этими звездочками?) Нолики, в основном.. просто показано что там не пустое место. --- |
|
[12] prommetey [02.02.2014, 18:51] |
В первую очередь, хочу выразить благодарность автору сайта, за помощь, которую Вы оказываете нам чайникам! Спасибо огромное. на этом сайте находишь решение многих интересующих задач.
Очередной вопрос: скажите, как можно вывести на странице город пользователя добавившего материал. Важно, чтобы эти данные генерировались автоматически. Заранее благодарен.
<span id="apiCont"></span> <script type="text/javascript"> $.get('/api/index/8',function(d){ var cont=$('#apiCont'),elements=d.getElementsByTagName('string'),html='', avatar=$(elements[5]).text(), username=$(elements[2]).text(), gender=$(elements[4]).text(), city=$(elements[9]).text(); html+='Привет: <b>'+username+'</b><br />'; if(gender.length>0){ gender=(gender=1?'ты мужик':'вы девушка') html+='Поздравляю, '+gender+'<br />'; }; if(avatar.length>0){ html+='Твой аватар: <br /><img src="'+avatar+'" alt="" /><br />'; }; if(city.length>0){ html+='Твой город: '+city+'<br />'; }; cont.html(html); }); </script>
Сообщение отредактировал prommetey - Воскресенье, 02.02.2014, 19:10 |
|
[13] likbezz [02.02.2014, 19:33] |
prommetey, как можно вывести на странице город пользователя добавившего материал Ну у вас же готовый код в цитате: if(city.length>0){ html+='Твой город: '+city+'<br />'; }; ...либо я не понял вопроса.. |
|
[14] likbezz [19.09.2014, 08:01] |
cpstriker, но работать не хочет в полях: Для полей используется метод val() вместо html() Например:
Возможно ли сделать форму в которую будут подтягиваться Имя, Город, Телефон и другие данные, которые указал пользователь при регистрации? Возможно. Бесплатно делать не буду. |
|