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


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

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

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.06 секунд. Запросов: 25.