Фильтр по:
  

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


Собственно, вот об этом.
Сейчас уже поздно, ничего осмысленного писать не буду, но вкратце так.

Тему решил создать по причине, практически полного отсутствия внятных разъяснений по данной теме.
Конечно, полно каких-то кодов/скриптов, даже здесь есть пару тем, но там большее для продвинутых в области скриптинга.

Здесь же, просто попытаюсь (наверняка не получится - как показывает практика - все хотят готовое и совсем не хотят вкуривать что-то новое) объяснить принцип, как с этим работать, и накидаю простенькие примеры, типа - как получить аватар из апи, или любую другую инфу доступную в нем.

Вот так и будет.
Всем спокойной, на сегодня отбой.


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


Для начала отвечу на несколько простых вопросов. Они хоть и простые, но ответ будет сложным, ибо те кто спрашивает подобные вещи, походу даже не знает что такое API в принципе.
И так:

Q:
Цитата
1. АПИ чисто скриптовый "интерфейс" ввода запроса? или можно обернуть в <div> и тому подобное и импортировать данные из ХТМЛ в ХТМЛ по типу условных операторов-переменных.

Нет, просто так что-то обернуть не получится.
Апи - это не операторы или что-то подобное, это просто сервис предоставление информации по определенному адресу.
То бишь, по сути - это те же страницы сайта, только в упрощенной xml форме (API - XML-RPC)

Для чего это тогда? Для упрощения получения каких-то данных, ибо страница выводится без ничего - только данные в структурированной форме.

Получать их можно как при помощи php, так и при помощи JavaScript.
Все запросы к API выполняются посредством GET-запросов/
Примеры будут ниже.



Q:
Цитата
2. автор в первом посте, да и вообще во всех малочисленных примерах на данном форуме приводят конструкцию через скрипт с синтаксисом вообще отличительным от мануалов юкоза, поправте если я не правильно вник в мануал, синтаксис:
Код
http://manual.ucoz.net/board/10-1-0-91
$.get(http://SITE_ADDRESS/api/MODULENAME/ANYRELPATH)
<struct></struct><name></name><value></value><array></array>

теги берем из таблиц, а адрес до нужного уровня вложения страницы (естественно смотрим где и что может вернуть апи)

Здесь схематически показан принцип формирования ссылки.
Где:
SITE_ADDRESS = вас сайт, в данном случае, http://likbezz.ru/
MODULENAME = модуль, в данном случае = forum
ANYRELPATH = остальная часть ссылки? в данном случае, для первого поста будет == 100-1574-1
В сумме получаем: http://likbezz.ru/api/forum/100-1574-1

Короче, не заморачивайтесь особо, проще можно - просто вставить в текущую ссылку /api/
Например, для списка последних постов форума:
HTML адрес == http://likbezz.ru/forum/0-0-1-34
Ссылка на те же данные, но в Апи == http://likbezz.ru/api/forum/0-0-1-34
Вот и все.



Q:
Цитата
3. если ориентироваться на все примеры что в встречались в данном форуме, то данную конструкцию(выше) нигде не встречал, написал наугад тупо ориентируясь на мануал. добавлю: синтаксис именно Get запросов нигде в мануалах не встречал,

Данный “синтаксис” не суть как важен, вы быстро вкурите тему если попытаетесь хоть чуть-чуть разобраться.
Все достаточно просто и интуитивно понятно.



Q:
Цитата
а $.get() чаще встречается в примерах на структуре скриптов,

Так и есть.
Чаще всего данные получают именно гет запросом, в данном случае jQuery $.GET



Q:
Цитата
и куда вписывать ключ и нужно ли его вообще вписывать в пределах одного доменна (правда прикрепленного)
Обобщенно: как правильно писать get запрос(синтаксис), во что его можно обернуть (див, табл, ячейку или все таки только в скрипт), куда тулить ключ(при каких условиях)

Ключ вписывать в самый конец адреса запроса, типа:
Код
http://likbezz.ru/api/forum/0-0-1-34?apikey=APIKEY

Где вместо
Код
APIKEY

- ваш ключ который можно взять в ПУ, если вы включили эту функцию.
Включается и выключается она там же, в ПУ » Общие настройки » Использовать API key
После того как будет поставлена галочка - появится поле с ключом. Вот это и пихать в apikey



По теме:
Как получить аватар пользователя через API
Как получить репутацию через API, АПИ uCoz


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


Q:
Цитата Info
Может быть кто-то уже спрашивал, возможно повторюсь.
Цитата
Получить данные можно так:
Код
http://site.com/api/load/razdel/category/name_file/32-1-0-305?apikey=API key

но получить данные по короткой ссылке (без ЧПУ) не возможно:
Код
http://site.com/api/load/32-1-0-305?apikey=API key

Это очень не удобно, можно ли это как-то исправить или обойти? Спасибо!


На данный момент обойти можно только если вы получаете данные при помощи php скрипт, или с использованием php + JavaScript.
В любом случае, нужен либо php, либо костыли с ифреймом.

Подробнее тут: Как получить API данные по короткой ссылке, без ЧПУ


 
Дата: Среда, 20.08.2014, 08:45 |
vinni
Рядовой
Группа: Зарегистрированные
Сообщений: 19
Награды: 0
Репутация: 0
Статус: Offline


likbezz, интересно. Сейчас активно юзать пытаюсь.) Жаль в модуле видео пока не предусмотрено.

У меня четыре вопроса назрело, надеюсь поможешь.

Речь идет про твой скрипт:

Код
function getXml(url,id,num){  
if(url){var url=url,cont=document.getElementById(id),tmp='';  
$.ajax({type:'GET',url:url,  
beforeSend:function(){cont.innerHTML='<img src="http://likbezz.ru/_source/_ico/loader/aj2.gif" alt="" />';},  
success:function(d){  
var n=d.getElementsByTagName('name'),j=num;  
var obj={TITLE:[],MESSAGE:[],ENTRY_URL:[],CATEGORY_NAME:[],CATEGORY_URL:[]};  
$.each(n,function(i,n){var o=$(n).text(),v=$(n.nextSibling.firstChild).text();  
if(o=='TITLE')obj.TITLE.push(v);  
if(o=='MESSAGE')obj.MESSAGE.push(v);  
if(o=='ENTRY_URL')obj.ENTRY_URL.push(v);  
if(o=='CATEGORY_NAME')obj.CATEGORY_NAME.push(v);  
if(o=='CATEGORY_URL')obj.CATEGORY_URL.push(v);  
});  
$.each(obj.TITLE,function(i){  
if(i<j){  
tmp+=['<h4><a href="'+obj.ENTRY_URL[i]+'">',obj.TITLE[i],'</a></h4>',obj.MESSAGE[i],'<br /><br />'].join('');  
}  
});  
cont.innerHTML=tmp;  
},  
error:function(a,b){if(b=='error'){cont.innerHTML='<b style="color:#F33;">Извините, но произошла ошибка: «'+a.status+'» '+a.statusText+'!</b>';}}  
});};};


1.) Просмотрел "список возвращаемых данных". img (img1,2,3,т.д.) не предусмотрено, я правильно понял?
И если нет... Как картинку поймать от новости?)

2.) Тянем данные с главной новостей

Код
<script>getXml('/api/news/','container',5);</script>


Все круто, но выводится ровно столько материалов - сколько задано в настройках модуля на главной странице. В нашем случае 9. Нашел коммент с этой же проблемой в описании api на юкозвских мануалах. Вопрос так и не решился. Как это обойти? Очень надо чтоб больше можно было выводить и желательно не ставить в настройках большее число.(

3.)
Код
<script>getXmlCont('/api/news/','container',60);</script>


container: можно использовать вместо id - class? Пробовал вот тут заменить id на class

Код
function getXml(url,[u]id[/u],num){


но не работало. Чувствую, что тут попахивает не хилым пробелом в знаниях, но бывало, что заменял и работало.

4.) Попытался совместить скрипт с подгрузкой в аякс окне (про которую недавно писал))

Код
function getXmlCont(url,id,num){
if(url){var url=url,cont=document.getElementById(id),tmp='';
$.ajax({type:'GET',url:url,
beforeSend:function(){cont.innerHTML='<img src="http://likbezz.ru/_source/_ico/loader/aj2.gif" alt="" />';},
success:function(d){
var n=d.getElementsByTagName('name'),j=num;
var obj={TITLE:[],MESSAGE:[],ENTRY_URL:[],CATEGORY_NAME:[],CATEGORY_URL:[],DATE:[],TIME:[],MATERIAL_ID:[]};
$.each(n,function(i,n){var o=$(n).text(),v=$(n.nextSibling.firstChild).text();
if(o=='TITLE')obj.TITLE.push(v);
if(o=='MESSAGE')obj.MESSAGE.push(v);
if(o=='ENTRY_URL')obj.ENTRY_URL.push(v);
if(o=='CATEGORY_NAME')obj.CATEGORY_NAME.push(v);
if(o=='CATEGORY_URL')obj.CATEGORY_URL.push(v);
if(o=='DATE')obj.DATE.push(v);
if(o=='TIME')obj.TIME.push(v);
if(o=='MATERIAL_ID')obj.MATERIAL_ID.push(v);
});
$.each(obj.TITLE,function(i){
if(i<j){
tmp+=[
'<div class="grid">',
'<div class="imgholder"><img src="/AW_v5/img/no-image.jpg" /></div>',
'<strong><a href="javascript://" onClick="apoloadme(',''+obj.MATERIAL_ID[i]+'', ''+obj.ENTRY_URL[i]+'',');return false;">',obj.TITLE[i],'</a> <img src="/AW_v5/img/ajax-loader.gif" id="loader',''+obj.MATERIAL_ID[i]+'','" style="display: none"></strong>',
obj.MESSAGE[i],
'<div class="meta feed-date" id="xDate$ID$">'+obj.DATE[i]+', '+obj.TIME[i]+'</div>',
'<div class="apoloadfull',''+obj.MATERIAL_ID[i]+'','" style="display: none"></div>',
'</div>'
].join('');
}
});
cont.innerHTML=tmp;
},
error:function(a,b){if(b=='error'){cont.innerHTML='<b style="color: #F33;">Извините, но произошла ошибка: «'+a.status+'» '+a.statusText+'!</b>';}}
});};};


В частности вот этот страх вышел:

Код
tmp+=[
'<div class="grid">',
'<div class="imgholder"><img src="/AW_v5/img/no-image.jpg" /></div>',
'<strong><a href="javascript://" onClick="apoloadme(',''+obj.MATERIAL_ID[i]+'', ''+obj.ENTRY_URL[i]+'',');return false;">',obj.TITLE[i],'</a> <img src="/AW_v5/img/ajax-loader.gif" id="loader',''+obj.MATERIAL_ID[i]+'','" style="display: none"></strong>',
obj.MESSAGE[i],
'<div class="meta feed-date" id="xDate$ID$">'+obj.DATE[i]+', '+obj.TIME[i]+'</div>',
'<div class="apoloadfull',''+obj.MATERIAL_ID[i]+'','" style="display: none"></div>',
'</div>'
].join('');


likbezz, что не так делаю? Вроде все правильно, а новость не подгружается.

Сам скрипт подгрузки:



В общем, вот... За скрипт большое спасибо. Как раз информеры кончились, не знал как быть пока твою статью не нашел.

Добавлено (20.08.2014, 08:45)
---------------------------------------------

Цитата vinni
В частности вот этот страх вышел:

На всякий скидываю как это выглядит в виде материалов стандартного информера:

Код
<?ifnot(substr($DATE$,-4)='2012')?><div class="grid">
<div class="imgholder">
<a href="javascript://" onClick="apoloadme('$ID$', '$ENTRY_URL$'); return false;"><img src="<?if($IMG_URL1$)?>$IMG_URL1$<?else?>/AW_v5/img/no-image.jpg<?endif?>" /></a>
</div>
<strong><a href="$ENTRY_URL$">$TITLE$</a> <img src="/AW_v5/img/ajax-loader.gif" id="loader$ID$" style="display: none"></strong>
$MESSAGE$
<div class="meta feed-date" id="xDate$ID$">$DATE$, $TIME$</div>
<div class="apoloadfull$ID$" style="display: none"></div>
</div><?endif?>


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


vinni,
Цитата vinni, Ср, 20.08.2014, 08:37:03
1.) Просмотрел "список возвращаемых данных". img (img1,2,3,т.д.) не предусмотрено, я правильно понял?

Правильно.
Обойти можно, лишь добавив в скрытом виде в текст материала

Цитата vinni, Ср, 20.08.2014, 08:37:03
2.) Тянем данные с главной новостей.
Все круто, но выводится ровно столько материалов - сколько задано в настройках модуля на главной странице. В нашем случае 9. Нашел коммент с этой же проблемой в описании api на юкозвских мануалах. Вопрос так и не решился. Как это обойти?

Перебором страниц - /api/news/2 и так далее.

Цитата vinni, Ср, 20.08.2014, 08:37:03
container: можно использовать вместо id - class? Пробовал вот тут заменить id на class

Можно, но не так “просто”.
Лучше использовать ID

Цитата vinni, Ср, 20.08.2014, 08:37:03
Попытался совместить скрипт с подгрузкой в аякс окне (про которую недавно писал)) что не так делаю? Вроде все правильно, а новость не подгружается.

Смотри логи, ошибки.. так навскидку не скажу.

И не забываем - это простейший пример скрипта, а не многопрофильный функционал.


 
Дата: Среда, 20.08.2014, 09:29 |
vinni
Рядовой
Группа: Зарегистрированные
Сообщений: 19
Награды: 0
Репутация: 0
Статус: Offline


Цитата likbezz
Обойти можно, лишь добавив в скрытом виде в текст материала

Что-то вроде темы, где ты показал как оформлять похожие материалы картинками? Именно тот скрипт и пытался приспособить, хэх.)

Цитата likbezz
Перебором страниц - /api/news/2 и так далее.

Пробовал сделать вот что:

Код
<script>getXmlCont('/api/news/1','/api/news/2','container',18);</script>


и

Код
function getXmlCont(url,url,id,num){


вместо

Код
function getXmlCont(url,id,num){


И ниже также дублировал url,url. Не получилось. Можешь показать правильный пример?)

Цитата likbezz
Смотри логи, ошибки.. так навскидку не скажу.

А сам код на первый взгляд верный? оО Думал, что может не так где...

Блин... А MATERIAL_ID можно дублировать в коде? Если сам код правильный, тогда и не знаю... Точная копия информера в принципе. Окно по сути должно открываться.

Добавлено (20.08.2014, 09:23)
---------------------------------------------

Цитата likbezz
Обойти можно, лишь добавив в скрытом виде в текст материала

Стоп. Кажется дошло. В сам текст или в краткое описание?

Добавлено (20.08.2014, 09:29)
---------------------------------------------

Цитата likbezz
И не забываем - это простейший пример скрипта, а не многопрофильный функционал.

А по мне так - сокровище. хд


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


vinni,
Цитата vinni, Ср, 20.08.2014, 09:23:06
вроде темы, где ты показал как оформлять похожие материалы картинками?

Не совсем.
Просто добавлять (вручную или скриптом) к тексту материала скрытый блок с картинкой, или html-комментарий, а в скрипте уже искать картинку в тексте материала и выводить, если есть.

Цитата vinni, Ср, 20.08.2014, 09:23:06
Пробовал сделать вот что

Данный скрипт выводит только первую страницу.

Цитата vinni, Ср, 20.08.2014, 09:23:06
Можешь показать правильный пример?)

Правильный - нет - лениво писать подобный функционал за спасибо.
Как вариант - два разных блока подряд и два вызова, соответственно.
Типа:
Код
<div id="container1"></div>
<script type="text/javascript">
getXml('/api/news/','container1',5);
</script>
<div id="container2"></div>
<script type="text/javascript">
getXml('/api/news/2','container2',5);
</script>


Цитата vinni, Ср, 20.08.2014, 09:23:06
А MATERIAL_ID можно дублировать в коде?

ID материала - уникальный номер в модуле.

Цитата vinni, Ср, 20.08.2014, 09:23:06
В сам текст или в краткое описание?

По адресу /api/news/2 выводится краткое содержание (или обрезанное полное, если в настройках установлено обрезать...)


 
Дата: Среда, 20.08.2014, 10:02 |
vinni
Рядовой
Группа: Зарегистрированные
Сообщений: 19
Награды: 0
Репутация: 0
Статус: Offline


Цитата likbezz
Не совсем.
Просто добавлять (вручную или скриптом) к тексту материала скрытый блок с картинкой, или html-комментарий, а в скрипте уже искать картинку в тексте материала и выводить, если есть.

Угу... Понятно, буду пробовать.)

Цитата likbezz
Правильный - нет - лениво писать подобный функционал за спасибо.
Как вариант - два разных блока подряд и два вызова, соответственно.

Пробовал, так работает, да.)

Цитата likbezz
ID материала - уникальный номер в модуле.

Знаю, говорю можно ли дублировать MATERIAL_ID. Например код статистики нельзя два раза размещать на странице, поэтому и спросил.) Мало ли. Там MATERIAL_ID используется три раза. Но явно проблема в другом.))

Спасибо.)

Добавлено (20.08.2014, 10:02)
---------------------------------------------

Цитата likbezz
По адресу /api/news/2 выводится краткое содержание (или обрезанное полное, если в настройках установлено обрезать...)

Так и думал.)


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


Цитата vinni, Ср, 20.08.2014, 10:02:37
Например код статистики нельзя два раза размещать на странице, поэтому и спросил.)

Можно - это же скрипт...


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


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