• Страница 1 из 1
  • 1
Модератор форума: likbezz  
Скрипты и коды для юкоз - Форум аццкого кодера » Вопросы по верстке, дизайну, управлению и настройки модулей СMS от uCoz » Юкоз API - описание, синтаксис, приемы » Как получить аватар пользователя через API (Как получить аватар пользователя через API)
Как получить аватар пользователя через API
Дата: Пятница, 08.11.2013, 02:50 |
likbezz
Аццкий кодер
Группа: Администраторы
Сообщений: 9093
Награды: 23
Репутация: 459
Статус: Unknown


Как получить аватар пользователя через 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


 
Дата: Пятница, 08.11.2013, 03:07 |
likbezz
Аццкий кодер
Группа: Администраторы
Сообщений: 9093
Награды: 23
Репутация: 459
Статус: Unknown


Если вы точно знаете, а узнать достаточно просто - надо всего лишь посчитать кол-во элементов до нужного значения.
Сейчас покажу.
Допустим данные пользователя.
Ответ сервера вот такой:
Код
<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» который отвечает за аватар.

Код
if(string.length>10)

- проверяем наличие аватара - ведь его может и не быть )

Код
cont.html('<img src="'+string+'" alt="" />');

- выводим в блок картинку с адресом аватарки текущего пользователя.
---

Пример: http://likbezz.ru/_example/_api/2013/get_api_user_avatar_eq.html
...


 
Дата: Пятница, 08.11.2013, 03:22 |
likbezz
Аццкий кодер
Группа: Администраторы
Сообщений: 9093
Награды: 23
Репутация: 459
Статус: Unknown


Таким же образом можно получить и Имя пользоателя, и пол и тп и тд - все то что доступно с данной страницы.

Листинг:
Код
<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>

Прикрепления: 3208936.png (5.9 Kb)

 
Дата: Вторник, 14.01.2014, 21:25 |
meme22
Лейтенант
Группа: Проверенные
Сообщений: 45
Награды: 0
Репутация: 0
Статус: Offline


хорошие примеры, некоторые очень помогли. Застряла только вот где: На странице материалов пользователя не могу вывести логин пользователя того, чьи материалы. Аватар вывела таким скриптом, работает.

Код

<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
 
Дата: Вторник, 14.01.2014, 22:59 |
likbezz
Аццкий кодер
Группа: Администраторы
Сообщений: 9093
Награды: 23
Репутация: 459
Статус: Unknown


meme22,
Цитата meme22, Вт, 14.01.2014, 21:25:21
Пытаюсь вывести логин, выводит, но только мой, как администратора, а нужно чтобы выводило тот логин, чьи материалы.

Вместо:
Код
var url='/api/index/8-$UID$';

это
Код
var url='/api/index/8-'+window.location.href.split('-')[2];

---

Цитата meme22, Вт, 14.01.2014, 21:25:21
и еще, почему то ссылка $PROFILE_URL$ выглядит как ссылка на страницу материалов данного пользователя (в моем случае на страницу материалов пользователя каталога сайтов)

- потому что нет такого оператора в данном шаблоне, следовательно, выводится пустая строка. А пустая строка в атрибуте href выглядит как ссылка на текущую страницу.


 
Дата: Вторник, 14.01.2014, 23:28 |
meme22
Лейтенант
Группа: Проверенные
Сообщений: 45
Награды: 0
Репутация: 0
Статус: Offline


Цитата likbezz, Вт, 14.01.2014, 21:59:16
это

спасибо!

Цитата likbezz, Вт, 14.01.2014, 21:59:16
потому что нет такого оператора в данном шаблоне, следовательно, выводится пустая строка. А пустая строка в атрибуте href выглядит как ссылка на текущую страницу.


это решаемая задача? наверное с помощью скрипта


 
Дата: Вторник, 14.01.2014, 23:37 |
likbezz
Аццкий кодер
Группа: Администраторы
Сообщений: 9093
Награды: 23
Репутация: 459
Статус: Unknown


meme22,
Цитата meme22, Вт, 14.01.2014, 23:28:24
это решаемая задача? наверное с помощью скрипта

Какая задача? получить ссылку на профиль?
Пример же выше есть, сделайте по подобию
Цитата meme22, Вт, 14.01.2014, 21:25:21
var src = $( xml ).find('name:contains("USER_AVATAR")').next().text();

Код
var ссылка_в_профиль = $( xml ).find('name:contains("USER_PROFILE")').next().text();

или
Цитата likbezz, Пт, 08.11.2013, 03:22:54
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>

Не проверял..


 
Дата: Суббота, 18.01.2014, 14:50 |
meme22
Лейтенант
Группа: Проверенные
Сообщений: 45
Награды: 0
Репутация: 0
Статус: Offline


Цитата likbezz, Вт, 14.01.2014, 22:37:45
Какая задача? получить ссылку на профиль?

да)

Цитата likbezz, Вт, 14.01.2014, 22:37:45
Пример же выше есть, сделайте по подобию


разобралась уже, благодарю))

Добавлено (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
 
Дата: Воскресенье, 19.01.2014, 01:30 |
likbezz
Аццкий кодер
Группа: Администраторы
Сообщений: 9093
Награды: 23
Репутация: 459
Статус: Unknown


meme22, мне не оч понятна вот эта строка:
Код
var url='/api/index/46-'+window.location.href.split('-')[5];

Что это?
Чему должен быть равен url ?

Цитата meme22, Сб, 18.01.2014, 14:50:31
Переменной количества записей там нет, как везде $NUM_ENTRIES$. А как получить со странички такие данные?

Это можно сделать информером - счетчики.


 
Дата: Четверг, 23.01.2014, 14:17 |
meme22
Лейтенант
Группа: Проверенные
Сообщений: 45
Награды: 0
Репутация: 0
Статус: Offline


Цитата likbezz, Вс, 19.01.2014, 00:30:42
Что это?
Чему должен быть равен url ?

странице пользователя, чьи материалы.

В общем я не знаю как вывести количество материалов пользователя на странице материалов блога.(иссякли все возможные идеи и мысли)
Цитата likbezz, Вс, 19.01.2014, 00:30:42
Это можно сделать информером - счетчики.


можно, но не для данного случая.

Еще раз о том, что мне нужно:
На странице материалов пользователя (блог) я вывожу аватар и логин пользователя, которому принадлежит данная страница. То есть для каждого она своя. Теперь мне нужно вывести количество всех заметок данного пользователя.

Пример:
Страница материалов user1 (/index/8-1) - заметок 5
Страница материалов user2 (/index/8-2) - заметок 12 и т.д.


 
Дата: Четверг, 23.01.2014, 22:34 |
likbezz
Аццкий кодер
Группа: Администраторы
Сообщений: 9093
Награды: 23
Репутация: 459
Статус: Unknown


meme22,
Цитата meme22, Чт, 23.01.2014, 14:17:06
странице пользователя, чьи материалы.

А, ошибся, показалось.. но нет, все верно.

Цитата meme22, Сб, 18.01.2014, 14:50:31
Блин, вобще не пойму что к чему, откуда брать эти данные 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>


Цитата meme22, Сб, 18.01.2014, 14:50:31
брать отсюда /api/index/46-*-*-*-* (что под этими звездочками?)

Нолики, в основном.. просто показано что там не пустое место.
---


 
Дата: Воскресенье, 02.02.2014, 18:51 |
prommetey
Рядовой
Группа: Проверенные
Сообщений: 1
Награды: 0
Репутация: 0
Статус: Offline


В первую очередь, хочу выразить благодарность автору сайта, за помощь, которую Вы оказываете нам чайникам! Спасибо огромное. на этом сайте находишь решение многих интересующих задач.

Очередной вопрос: скажите, как можно вывести на странице город пользователя добавившего материал. Важно, чтобы эти данные генерировались автоматически. Заранее благодарен.

Цитата likbezz, Пт, 08.11.2013, 01:22:54
<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
 
Дата: Воскресенье, 02.02.2014, 19:33 |
likbezz
Аццкий кодер
Группа: Администраторы
Сообщений: 9093
Награды: 23
Репутация: 459
Статус: Unknown


prommetey,
Цитата prommetey, Вс, 02.02.2014, 18:51:09
как можно вывести на странице город пользователя добавившего материал

Ну у вас же готовый код в цитате:
Цитата prommetey, Вс, 02.02.2014, 18:51:09
if(city.length>0){
html+='Твой город: '+city+'<br />';
};

...либо я не понял вопроса..


 
Дата: Пятница, 19.09.2014, 08:01 |
likbezz
Аццкий кодер
Группа: Администраторы
Сообщений: 9093
Награды: 23
Репутация: 459
Статус: Unknown


cpstriker,
Цитата cpstriker, Чт, 18.09.2014, 15:46:30
но работать не хочет в полях:

Для полей используется метод val() вместо html()
Например:
Код
cont.val(html);


Цитата cpstriker, Чт, 18.09.2014, 15:46:30
Возможно ли сделать форму в которую будут подтягиваться Имя, Город, Телефон и другие данные, которые указал пользователь при регистрации?

Возможно.
Бесплатно делать не буду.


 
Скрипты и коды для юкоз - Форум аццкого кодера » Вопросы по верстке, дизайну, управлению и настройки модулей СMS от uCoz » Юкоз API - описание, синтаксис, приемы » Как получить аватар пользователя через API (Как получить аватар пользователя через API)
  • Страница 1 из 1
  • 1
Поиск:


Мобильная версия