Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   нужна помощь с очень простыми вещами (https://javascript.ru/forum/dom-window/21288-nuzhna-pomoshh-s-ochen-prostymi-veshhami.html)

babeshka 03.09.2011 22:02

нужна помощь с очень простыми вещами
 
привет всем!
:help:
задача простая, но не для меня)) поясню, я не шарю особо в сайтостроении разных языках (РНР js и т.д.), но на юкозе кое что получается лепить(конструктор лего :) ).
Суть вопроса такова, на моем футбольном сайте(отдельный чемпионат) хочу чтобы таблички и расписание матчей автоматом грабились с оф.сайта. на мой. PHP отключено на юкозе, вернее за него нужно платить, но не хочется. Подсказали что с помощю js можно тоже такую простую(на мой взгляд) задачу сделать, но как именно мне не сказали. Прошу помощи, или где можно пошагово глянуть что за чем и как это все "скушать".
Заранее признателен!!!

зы: если выразился где-то непарвильно прошу простить)

Sweet 03.09.2011 22:12

Сомневаюсь, что что-то получится из-за кроссдоменных ограничений.

DjDiablo 03.09.2011 22:16

ну уж не совсем они и простые.

Стандартный парсер ты там ненапишешь, ибо отпарсенную информацию ты не сохранишь. Придётся парсить каждый раз при выводе таблице

Так навскидку.
1) Сделать iframe который будет отбражать сайт с нужной тебе таблицей.

2) найти в фрейме нужную таблицу при помощи jquery или какой там на юкозе фреймворк.
3) скопировать таблицу в тело своей странице.

соответственно фрейм должен быть как то скрыт от глаз пользователя. Чтобы было непонятно откуда инфа берётся.
можно ещё тупо вывести сам фрейм, но удалить в нём всё кроме таблицы.

если не забуду, завтра наваяю код.

DjDiablo 03.09.2011 22:17

Цитата:

Сообщение от Sweet (Сообщение 124651)
Сомневаюсь, что что-то получится из-за кроссдоменных ограничений.

Нет нечего невозможного ))).

melky 03.09.2011 22:22

Цитата:

Сообщение от babeshka (Сообщение 124647)
хочу чтобы таблички и расписание матчей автоматом грабились с оф.сайта. на мой

где там описание матчей ? прошу ткнуть пальцем.

ЗЫ почитайте в гугле про iframe

babeshka 03.09.2011 22:38

спасибо за быстрые ответы)

2 melky: расписание тут, а хочу чтобы было на моем сайте сдесь, турнирная таблица отсюда, вот сюда же, и так по трем лигам, и кубке.
Все это можно и ручками, не вопрос, но геморно, хочется автоматики, если это возможно.

DjDiablo 03.09.2011 22:42

Есть ещё “Screen Scraping” с помощью YQL.
Он позволяе получить html код сайта.
не разу непользовался, и непроверял, поправьте где ошибся;
Кроссдоменный запрос осуществляется при помощи xdomainajax.js базирующегося на YQL

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>
<script type="text/javascript" src="js/jquery.xdomainajax.js"></script>
<script type="text/javascript" src="js/main.js"></script>
$(document).ready(function() {
 $.get('http://nujniySait.ru/nujnayaStranica', function(res) {
       var parse=$(res.responseText),       //Организуем для Jquery доступ к тексту с кодом страницы.
            tab=parse.find("#SuperTable");  //ищем таблицу по какомунибудь признаку к примеру id= supertable
       $(".conteiner").append(tab);          //добавляем к контейнеру на нашей страницы заранее вычлененный tab 
 });
});


ещё раз повторю, может неработать.
Идею взял отсюда. http://www.internet-technologies.ru/...icle_1529.html

melky 03.09.2011 23:12

без серверной стороны или контроля над этим сайтом сделать ничего не получится

DjDiablo 03.09.2011 23:24

Это для упрямых.
http://habrahabr.ru/blogs/personal/107905/

Да и в крайнем случае всегда есть фреймы, из которых можно достать всё что надо.

DjDiablo 03.09.2011 23:45

Вот готовый проверенный рабочий код.

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>

<script type="text/javascript" src="c/jquery.xdomainajax.js"></script>

<script type="text/javascript">

$(document).ready(function() {
 $.get('http://www.fa13.com/champ.html?champ=Uk&a=r', function(res) {

       var parse=$(res.responseText),       //Организуем для Jquery доступ к тексту с кодом страницы.
            tab=parse.find(".mainBG");  //ищем информацию по классу  .mainBG
       $("body").append(tab);          //добавляем к странице заранее вычлененный tab

 });
});
</script>


забрать xdomainajax.js можно здесь
https://github.com/jamespadolsey/jQu...xdomainajax.js

рабочий код + плагин здесь - можно распакавать и запустить

Кстати для mainBG тебе надо CSS сделать, ибо css как понимаешь не парсится. а можно ещё CSS прямо с того сайта подключить, но не надо ибо он там убогий.

devote 04.09.2011 00:15

И охото этому yahoo мучать свои сервера левыми запросами... Не понимаю их политику.

melky 04.09.2011 00:22

ого че.. удивило

devote 04.09.2011 00:41

Цитата:

Сообщение от melky (Сообщение 124668)
ого че.. удивило

Что именно удивило?

melky 04.09.2011 01:45

как-бы кроссдоменный ajax. потом посмотрел в консоль и всё прояснилось и улетучилось:/

devote 04.09.2011 01:46

Цитата:

Сообщение от melky
как-бы кроссдоменный ajax. потом посмотрел в консоль и всё прояснилось и улетучилось:/

А мне и смотреть не пришлось, понял сразу как тока увидел ссылку на yahoo

vmyshkin 10.04.2012 16:46

Подскажите какой будет код если "отличительная черта" таблицы тег <table summary="job qewe">

iskatel 27.08.2012 23:38

Выдрать форму получилось по аналогии http://javascript.ru/forum/dom-windo...tml#post124665

вот сайт с которого нужно выдрать форму и получать результат: http://search.belpost.by/

но когда нажимаю кнопку поиск, ничего не происходит, подскажите как правильно создать запрос POST ?? т.е. как я понимаю нужно передать "item" - сам текст, и internal = 2 (потому что интересует только "Слежение за международными отправлениями и EMS")

russia_marshall 19.11.2012 09:58

Добрый день, воспользовался данным скриптом, но у меня он не совсем корректно работает. Всё работает пока все файлы(страницы HTML, CSS, JS) находятся на компе, кроме страницы с которой нужно брать контент, а как только выкладываю всё в сеть, то он перестаёт работать просто не подгружает контент с другой страницы(отображается пустой блок). Файлы точно все выкладываю, путь к файлам тоже верный(несколько раз проверял). Не подскажите, в чём проблема?

DjDiablo 19.11.2012 14:29

опустим пока кросс доменные запросы из браузера.
Ключевой вопрос, можете ли вы выложить php на сервер(если конечно сервер поддерживает PHP) ?

russia_marshall 19.11.2012 19:27

PHP сервер поддерживает, т.к. это не единственный скрипт, который используется на сайте. Другие работают без проблем.

DjDiablo 19.11.2012 19:55

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

DjDiablo 19.11.2012 20:51

пример получения данных

<?
	$ch = curl_init (); // инициализация
	curl_setopt ($ch , CURLOPT_URL , "укажите здесь страницу которую надо парсить");
	curl_setopt ($ch , CURLOPT_USERAGENT , "Mozilla/5.0"); // каким браузером будем прикидываться
	curl_setopt ($ch , CURLOPT_RETURNTRANSFER , 1 ); // вывод страницы в переменную
	$content = curl_exec($ch); // скачиваем страницу
	curl_close($ch); // закрываем соединение 

        echo $content;
?>

Александр 60 лет 19.11.2012 21:54

если знаешь ...то всё ..очень простые вещи )))) но к сожалению кажущее простое ...совсем не простое......

russia_marshall 20.11.2012 13:35

Цитата:

Сообщение от DjDiablo (Сообщение 216764)
пример получения данных

<?
	$ch = curl_init (); // инициализация
	curl_setopt ($ch , CURLOPT_URL , "укажите здесь страницу которую надо парсить");
	curl_setopt ($ch , CURLOPT_USERAGENT , "Mozilla/5.0"); // каким браузером будем прикидываться
	curl_setopt ($ch , CURLOPT_RETURNTRANSFER , 1 ); // вывод страницы в переменную
	$content = curl_exec($ch); // скачиваем страницу
	curl_close($ch); // закрываем соединение 

        echo $content;
?>

Цитата:

Сообщение от DjDiablo
пример получения данных

01 <?
02 $ch = curl_init (); // инициализация
03 curl_setopt ($ch , CURLOPT_URL , "укажите здесь страницу которую надо парсить");
04 curl_setopt ($ch , CURLOPT_USERAGENT , "Mozilla/5.0"); // каким браузером будем прикидываться
05 curl_setopt ($ch , CURLOPT_RETURNTRANSFER , 1 ); // вывод страницы в переменную
06 $content = curl_exec($ch); // скачиваем страницу
07 curl_close($ch); // закрываем соединение
08
09 echo $content;
10 ?>
__________________
Все на свете возможно, если отключить голову (с)


Спасибо за помощь в решении моей проблемы, но я кажется немного темой ошибся, мне надо штобы контент брался с моего сайта и распространялся на другие страницы этого же сайта. Мне больше подходит способ вот из этой темы http://javascript.ru/forum/misc/2175...a-drugojj.html

Попробовал способ из той темы и столкнулся с проблемой: если файл, который нужно подгрузить находится в этом каталоге или каталоге ниже уровня(str1.html или menu/str1.html), то всё работает без проблем, но если файл находится в каталоге выше уровня(../str1.html), то тогда он уже не подгружается. Пробовал подгружаемый файл выкладывать на сервер и писать в скрипте полностью весь URL, тоже не помогло

zaninpsih 22.03.2013 00:33

Нужно сделать Scraping. Помогите!!!
 
видел ваш код, вот этот:
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>
<script type="text/javascript" src="c/jquery.xdomainajax.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$.get('http://www.fa13.com/champ.html?champ=Uk&a=r', function(res) {
var parse=$(res.responseText), //Организуем для Jquery доступ к тексту с кодом страницы.
tab=parse.find(".mainBG"); //ищем информацию по классу .mainBG
$("body").append(tab); //добавляем к странице заранее вычлененный tab
});
});
</script>

попытался использовать - не работает, причем ни этот пример(сайт не работает тот уже), ни измененный код под мои параметры, а они следующие: на этом сайте есть слева в сайдбаре таблица Live Spot Gold, обведены те данные которые я пытаюсь извлечь и вывести в сайдбар на другой сайт. Я сделал код, в котором пытаюсь извлечь время закрытия рынка "market_time" но ничего не выводиться, буду признателен если скажете где ошибка:
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>
<script type="text/javascript" src="/my_scripts/jquery.xdomainajax.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$.get('http://www.kitco.com/', function(res) {
var parse=$(res.responseText), //Организуем для Jquery доступ к тексту с кодом страницы.
tab=parse.find("market_time"); //ищем информацию по классу .mainBG
$("body").append(tab); //добавляем к странице заранее вычлененный tab
});
});
</script>

рони 22.03.2013 01:50

zaninpsih,
<!DOCTYPE HTML>
<html>
<head>
  <title>Untitled</title>
  <script src="http://code.jquery.com/jquery-latest.js"></script>
  <script>jQuery.ajax = function (d) {
    var b = location.protocol,
        e = RegExp(b + "//" + location.hostname),
        f = "http" + (/^https/.test(b) ? "s" : "") + "://query.yahooapis.com/v1/public/yql?callback=?";
    return function (a) {
        var c = a.url;
        if (/get/i.test(a.type) && !/json/i.test(a.dataType) && !e.test(c) && /:\/\//.test(c)) {
            a.url = f;
            a.dataType = "json";
            a.data = {
                q: 'select * from html where url="{URL}" and xpath="*"'.replace("{URL}", c + (a.data ? (/\?/.test(c) ? "&" : "?") + jQuery.param(a.data) : "")),
                format: "xml"
            };
            !a.success && a.complete && (a.success = a.complete, delete a.complete);
            var b = a.success;
            a.success = function (a) {
                b && b.call(this, {
                    responseText: (a.results[0] || "").replace(/<script[^>]+?\/>|<script(.|\s)*?\/script>/gi, "")
                }, "success")
            }
        }
        return d.apply(this, arguments)
    }
}(jQuery.ajax);</script>
  <script>
  (function ($)
    {
      $(function ()
        {
    $.ajax({
    url: 'http://www.kitco.com/',
    type: 'GET',
    success: function(res) {
        var tab = $(res.responseText).find('.market_time');
        $("body").append(tab);
    }
});
       }
      )
    }
  )(jQuery)
  </script>
</head>

<body>
please wait
</body>
</html>

zaninpsih 23.03.2013 19:23

Спасибо огромное за быстрый ответ Рони!
Оказывается предыдущий код тоже работал, как и тот что вы сейчас предоставили, проблема оказывается в том, что он не выводит данные в произвольный виджет в WordPress... Скажите где копать? другие коды javascript работают без проблем, этот не хочет.
Спасибо парни заранее!

Tonni 10.09.2016 18:57

Здравствуйте. Помогите пожалуйста, я в скриптах очеень слабый...(
Хочу сделать такую же штуку, как здесь http://sattelite.com.ua/ (P.S"Тестирование скорости"). Вот от сюда http://www.speedtest.net/ ?

shkur 26.10.2016 14:17

Почему у меня не получается ни чего с гуглоскриптами?
Я пытаюсь этим способом (Рони пост 26) убрать табличку над скриптом "This application was created by another user, not by Google"
вот ссылка на скрипт - точнее на опубликованное веб-приложение. https://script.google.com/macros/s/A...Cm3Vadm9a/exec
Если вы запустите его - то вы увидите самую простую вебстраничку.
Это вообще решается таким способом?

function doGet() {
  return HtmlService.createHtmlOutputFromFile('index')
  .setFaviconUrl('//sites.google.com/a/shkur.ru/karta-moto-zimovok/home/favicon.ico')
  .setTitle('как убрать "This application was created by another user, not by Google." когда запускаешь скрипт от инкогнито')
  .setXFrameOptionsMode(HtmlService.XFrameOptionsMode.ALLOWALL);
}

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body>
    <h1>как убрать "This application was created by another user, not by Google" когда запускаешь скрипт от инкогнито</h1>
    <ol>
      <li>вот этот вариант не работает - почему-то в переменной пусто. <a href="http://javascript.ru/forum/dom-window/21288-nuzhna-pomoshh-s-ochen-prostymi-veshhami-3.html#post241947">http://javascript.ru/forum/dom-window/21288-nuzhna-pomoshh-s-ochen-prostymi-veshhami-3.html#post241947</a></li>    
    </ol>
  </body>
</html>

adash 12.01.2019 16:06

Цитата:

Сообщение от рони (Сообщение 241947)
zaninpsih,
<!DOCTYPE HTML>
<html>
<head>
  <title>Untitled</title>
  <script src="http://code.jquery.com/jquery-latest.js"></script>
  <script>jQuery.ajax = function (d) {
    var b = location.protocol,
        e = RegExp(b + "//" + location.hostname),
        f = "http" + (/^https/.test(b) ? "s" : "") + "://query.yahooapis.com/v1/public/yql?callback=?";
    return function (a) {
        var c = a.url;
        if (/get/i.test(a.type) && !/json/i.test(a.dataType) && !e.test(c) && /:\/\//.test(c)) {
            a.url = f;
            a.dataType = "json";
            a.data = {
                q: 'select * from html where url="{URL}" and xpath="*"'.replace("{URL}", c + (a.data ? (/\?/.test(c) ? "&" : "?") + jQuery.param(a.data) : "")),
                format: "xml"
            };
            !a.success && a.complete && (a.success = a.complete, delete a.complete);
            var b = a.success;
            a.success = function (a) {
                b && b.call(this, {
                    responseText: (a.results[0] || "").replace(/<script[^>]+?\/>|<script(.|\s)*?\/script>/gi, "")
                }, "success")
            }
        }
        return d.apply(this, arguments)
    }
}(jQuery.ajax);</script>
  <script>
  (function ($)
    {
      $(function ()
        {
    $.ajax({
    url: 'http://www.kitco.com/',
    type: 'GET',
    success: function(res) {
        var tab = $(res.responseText).find('.market_time');
        $("body").append(tab);
    }
});
       }
      )
    }
  )(jQuery)
  </script>
</head>

<body>
please wait
</body>
</html>

Кажется не работает решение уже

adash 12.01.2019 16:59

рони,
получаю GET https://query.yahooapis.com/v1/publi...=1547301632899 net::ERR_NAME_NOT_RESOLVED

рони 12.01.2019 17:05

Цитата:

Сообщение от adash
Кажется не работает решение уже

:yes:

adash 12.01.2019 17:13

рони,
есть ли аналоги?

рони 12.01.2019 19:52

Цитата:

Сообщение от adash
есть ли аналоги?

не знаю, проще через свой сервер парсить.

adash 12.01.2019 19:57

Это если на свой сайт с чужого. Хотел со своего раздавать для вставки на сторонние.
Понял что проще сделать путем вывода через iframe создав отдельную страницу с нужными данными. У фейсбука подсмотрел.
Спасибо.

рони 13.01.2019 12:01

adash,
может чем поможет
https://javascript.ru/forum/misc/764...tml#post501902


Часовой пояс GMT +3, время: 15:31.