Встраивание части веб-сайта - PullRequest
6 голосов
/ 01 февраля 2010

Предположим, я хочу встроить последний комикс одного из моих любимых веб-комиксов на свой сайт в качестве своего продвижения. У webcomic есть полоска внутри div с идентификатором, поэтому я решил, что могу просто встроить div на свой сайт, за исключением того, что я не смог найти примеры кода для того, как это сделать (все они показывают, как вставлять flash или целый сайт). Может кто-нибудь показать мне (или рассказать), как это делается?

PS Я бы предпочел не использовать скрипты на стороне сервера или внешние сервисы (что часто рекомендуется для встраивания RSS).

Ответы [ 4 ]

12 голосов
/ 09 февраля 2010

Обновление - междоменный запрос с помощью jQuery (на стороне клиента)

Вчера я просматривал блог Джеймса Падолси, где он опубликовал отличную статью о том, как междоменный запрос с помощью jQuery, также у Криса Хейлманна есть отличная DEMO .

Принцип заключается в использовании YQL -> API Yahoo для запросов веб-страниц, где вы получаете JSON со всеми HTML. Счастливого соскоба:)

Очистить удаленные данные с помощью php, загрузить с помощью jQuery

А как насчет простого AJAX вызова, который бы перехватывал комический элемент и обновлял его содержимым, которое <div id="update-comic" /> в основном использовалось для этой цели?

Также вы будете использовать простую php для получения удаленной страницы, потому что вы не можете совершить ajax-вызов в другом домене

примечание: у пользователя должен быть включен JavaScript, также следующий код использует библиотеку jQuery

Собираем все вместе

  1. на вашей странице, где вы хотите отобразить удаленный комикс, создайте div только для этой цели, давайте назовем его update-comic

    <div id="update-comic">
        <!-- here comes scraped content -->
    </div>
    
  2. запишите php , назовите его comic-scrape.php, он загрузит HTML с удаленной страницы, вы должны рассмотреть кэширование ответа и обновлять его через указанный интервал (например, 30 минут, 1 час, ваш звонок .. :))

    производительность сервера не должна ухудшаться после простой проверки кэша

    <?php
        $url = 'http://www.example.com/';
        $response = file_get_contents($url);
        echo $response;
    
  3. теперь приходит магия jQuery , где вы делаете вызов ajax на своем php-скребке и берете только интересующий вас элемент. Поместите этот скрипт в вашу страницу просмотра (где у вас есть <div id="update-comic" />

    <script type="text/javascript">
    $(function () {
        // set all your required variables
        var 
            localUrl = '/comic-scrape.php',
            elementId = '#remote-comic-id',
            elementToUpdate = $('#update-comic');
    
            // update the local elementToUpdate with elementId contents
            // from your php in localUrl
    
            elementToUpdate.load(localUrl + ' ' + elementId;
    });
    </script>
    

Надеюсь, я все рассмотрел.

Использование simplexml и xpath

Как предложил philfreo в комментарии, жизнеспособное решение может также содержать выбор необходимого идентификатора на стороне сервера. Это очень просто, если использовать php's simplexml и небольшой xpath:

<?php

    // set remote url and div id to be found
    $elementId = 'remote-comic-id';
    $url = 'http://www.example.com/';

    // instantiate simple xml element and populate from $url
    $xml = new SimpleXMLElement($url, null, true);

    // find required div by id
    $result = $xml->xpath("//div[id={$elementId}]");

    // take first element from array, which is our desired div
    $div = array_pop($result);

    echo $div;
1 голос
/ 08 февраля 2010

Это невозможно, потому что вы не можете манипулировать контентом iframe / frame. Использование тега iframe просто изменит содержимое тега, но не src. Ни с AJAX, потому что вы должны быть в одном домене.

Так, например, вы можете использовать PHP с cURL или просто с fopen.

0 голосов
/ 01 февраля 2010

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

Вот пример: http://www.w3schools.com/TAGS/tryit.asp?filename=tryhtml_iframe

Это выглядит так:

<iframe src ="http://www.example.com/index.html" width="100%" height="300"></iframe>
0 голосов
/ 01 февраля 2010

...