Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: JavaScript. Значения с другой страницы.  (Прочитано 4124 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Atilla

  • Автор темы
  • Участник
  • *
  • Сообщений: 196
    • Просмотр профиля
JavaScript. Значения с другой страницы.
« : 21 Февраля 2010, 12:33:04 »
Как при помощи JavaScript значения тега с другой страницы?
А точнее:
Есть страница хабраюзера: habrauser.habrahabr.ru. На ней внутри тега с классом "mark" хранится значение кармы:
<span class="mark">
<span>30,0 </span>
</span>
Как из скрипта на другой странице узнать значение его кармы, хабрасилы и прочего?

Оффлайн iCloud

  • Участник
  • *
  • Сообщений: 109
    • Просмотр профиля
Re: JavaScript. Значения с другой страницы.
« Ответ #1 : 21 Февраля 2010, 13:39:07 »
Парсить страницу. Не уверен что есть средства у JS(хотя должны быть). В php это просто сделать с помощью curl.

Оффлайн Atilla

  • Автор темы
  • Участник
  • *
  • Сообщений: 196
    • Просмотр профиля
Re: JavaScript. Значения с другой страницы.
« Ответ #2 : 21 Февраля 2010, 13:45:37 »
Действительно, первое что пришло в голову :)
Но как получить страницу в виде строки?

Оффлайн iCloud

  • Участник
  • *
  • Сообщений: 109
    • Просмотр профиля
Re: JavaScript. Значения с другой страницы.
« Ответ #3 : 21 Февраля 2010, 13:59:23 »
На пыхе куча функций, я использовал file_get_contents. Потом уже регуляркой выдирал нужные мне значения:)
PS А вообще у хабра API есть, проще с ним работать.

Оффлайн Atilla

  • Автор темы
  • Участник
  • *
  • Сообщений: 196
    • Просмотр профиля
Re: JavaScript. Значения с другой страницы.
« Ответ #4 : 21 Февраля 2010, 14:14:58 »
На пыхе куча функций, я использовал file_get_contents. Потом уже регуляркой выдирал нужные мне значения:)
PS А вообще у хабра API есть, проще с ним работать.
Что за зверь API, и как с ним работать?

Оффлайн wl

  • Старожил
  • *
  • Сообщений: 1393
    • Просмотр профиля
Re: JavaScript. Значения с другой страницы.
« Ответ #5 : 21 Февраля 2010, 14:31:33 »
API - application programming interface.
Библиотека функций и, может быть, классов для написания своих программ.
На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, "Гамлет", вольный перевод)

Оффлайн Atilla

  • Автор темы
  • Участник
  • *
  • Сообщений: 196
    • Просмотр профиля
Re: JavaScript. Значения с другой страницы.
« Ответ #6 : 21 Февраля 2010, 14:38:04 »
На хабре сказано:

Запрос:
GET на http://habrahabr.ru/api/profile/логин

Как это понять? Гугл не хочет помогать :(

Пользователь решил продолжить мысль 21 Февраля 2010, 14:50:32:
Нашел такое решение:
username="habauser";
var req = new ActiveXObject("Microsoft.XMLHTTP");
var url="http://www.habrahabr.ru/api/profile/"+username;
req.open("GET", url, false);
req.send();
Во-первых как получать значения, во-вторых хром ругается: Uncaught ReferenceError: ActiveXObject is not defined на вторую строку. Что можно сделать?
« Последнее редактирование: 21 Февраля 2010, 14:50:32 от Atilla »

Оффлайн iCloud

  • Участник
  • *
  • Сообщений: 109
    • Просмотр профиля
Re: JavaScript. Значения с другой страницы.
« Ответ #7 : 21 Февраля 2010, 15:37:00 »
ActiveX это только для IE.
API смотрю уже нашел, осталось только разобраться чем парсить и как, в этом нам поможет гугл ;)

Оффлайн dmig

  • Старожил
  • *
  • Сообщений: 1668
    • Просмотр профиля
Re: JavaScript. Значения с другой страницы.
« Ответ #8 : 21 Февраля 2010, 15:38:20 »
Нашел такое решение:
username="habauser";
var req = new ActiveXObject("Microsoft.XMLHTTP");
var url="http://www.habrahabr.ru/api/profile/"+username;
req.open("GET", url, false);
req.send();
Во-первых как получать значения, во-вторых хром ругается: Uncaught ReferenceError: ActiveXObject is not defined на вторую строку. Что можно сделать?
моск включить. погуглить на тему xmlhttprequest.
а можно сразу взять фреймворк, типа jquery, и использовать его функции для этих целей -- это будет проще, чем писать обработку и разбор на голом js.

Оффлайн Atilla

  • Автор темы
  • Участник
  • *
  • Сообщений: 196
    • Просмотр профиля
Re: JavaScript. Значения с другой страницы.
« Ответ #9 : 21 Февраля 2010, 15:59:26 »
Моск включен. Из ушей пар идет.
На просторах хабра нашел почти готовый пример:
var YOUR_USER_NAME = '';
function check() {
        var req = new XMLHttpRequest();
        req.open('GET', 'http://habrahabr.ru/api/profile/'+YOUR_USER_NAME, true);
        req.overrideMimeType('text/xml');
        req.onreadystatechange = function() {
                if (req.readyState == 4 && req.status == 200) {
                        /*
                         * Debuging info
                         *
                         * console.log(req.responseXML);
                         * console.log(req.responseXML.getElementsByTagName('karma')[0].firstChild.nodeValue);
                         * console.log(req.responseXML.getElementsByTagName('rating')[0].firstChild.nodeValue);
                         */
                        document.getElementById('yourkarma').innerHTML = req.responseXML.getElementsByTagName('karma')[].firstChild.nodeValue;
                        document.getElementById('yourrating').innerHTML = req.responseXML.getElementsByTagName('rating')[].firstChild.nodeValue;
                }
        };
        req.send();
}
Но и тут проблемы. Во-первых почти ничего не ясно :)
Во-вторых req.status возвращает всегда 0. Если изменить строку на:
 if (req.readyState == 4 && req.status == 0)
То хром ругается:
ncaught TypeError: Cannot call method 'getElementsByTagName' of null.
В чем дело?

Оффлайн iCloud

  • Участник
  • *
  • Сообщений: 109
    • Просмотр профиля
Re: JavaScript. Значения с другой страницы.
« Ответ #10 : 21 Февраля 2010, 16:06:04 »
Цитировать
var YOUR_USER_NAME = '';
сюда юзернейма вписал?

Оффлайн dmig

  • Старожил
  • *
  • Сообщений: 1668
    • Просмотр профиля
Re: JavaScript. Значения с другой страницы.
« Ответ #11 : 21 Февраля 2010, 16:47:18 »
вот здесь неплохой пример скрипта для твиттера: http://userscripts.org/scripts/review/65765
GM_xmlhttpRequest отличается от стандратного только тем, что позволяет делать запросы не только к своему домену.

Оффлайн Atilla

  • Автор темы
  • Участник
  • *
  • Сообщений: 196
    • Просмотр профиля
Re: JavaScript. Значения с другой страницы.
« Ответ #12 : 21 Февраля 2010, 19:10:36 »
Решил чуток глубже изучить эту тему: http://xmlhttprequest.ru/
Составил такой скрипт с асинхронным запросом:
function getXmlHttp(){
var xmlhttp;
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");} catch (E) {xmlhttp = false;}
}
if (!xmlhttp && typeof XMLHttpRequest!='undefined') {xmlhttp = new XMLHttpRequest();}
return xmlhttp;
}
var xmlhttp = getXmlHttp()
xmlhttp.open('GET', 'http://habrahabr.ru/api/profile/atilla', true);
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4) {
alert (xmlhttp.statusText);
if(xmlhttp.status == 200) {
alert(xmlhttp.responseText);
}
}
};
xmlhttp.send(null);
Сервер возвращает xmlhttp.status равный нулю. И xmlhttp.responseText естественно пуст. Хотя если набрать в броузере http://habrahabr.ru/api/profile/atilla/ то все выходит нормально:
Atilla 0.6 0.5 19081
Если http://habrahabr.ru/api/profile/atilla заменить на любой другой адрес или документ, та же самая бурда - xmlhttp.status==0.
Может кто сталкивался с такой проблемой?

Оффлайн dmig

  • Старожил
  • *
  • Сообщений: 1668
    • Просмотр профиля
Re: JavaScript. Значения с другой страницы.
« Ответ #13 : 21 Февраля 2010, 19:28:10 »
если уж так влом почитать про xmlhttprequest, подскажу: скрипту запрещено слать запросы домену отличному от того, откуда он загружен.

Оффлайн Atilla

  • Автор темы
  • Участник
  • *
  • Сообщений: 196
    • Просмотр профиля
Re: JavaScript. Значения с другой страницы.
« Ответ #14 : 21 Февраля 2010, 19:41:35 »
Ах, чтоб её за одно место.
Действительно с хабра работает нормально :)
А как запускать это дело с других доменов?

 

Страница сгенерирована за 0.04 секунд. Запросов: 25.