Как загрузить контент из блога блоггера с помощью jquery? - PullRequest
0 голосов
/ 15 октября 2010

Я хочу получать отдельные сообщения из блога блоггера, превращать их в отдельные классы и добавлять их контент на мой сайт. Я должен сделать это, потому что аппаратное обеспечение, на котором я размещаю свой сайт, имеет очень небольшую вычислительную мощность (Pentium 3) и очень мало оперативной памяти (512 МБ), и если бы я просто разместил на нем WordPress блог, время отклика будет очень медленным, даже через обратный прокси, такой как lighttpd или nginx.

Итак, на данный момент я знаю, что мне нужно позвонить jQuery.ajax() и указать это на атомную ленту блога блоггера, но я довольно растерялся после этого. Как разделить данные XML после их получения на отдельные записи / классы блога и, возможно, загрузить изображения, которые будут размещены в этих записях блога?

1 Ответ

0 голосов
/ 15 октября 2010

Вот пример того, как обрабатывать канал Atom. В этом примере я получаю локальный файл XML-канала. В реальном мире вам понадобится простой прокси-скрипт для его извлечения, поскольку вы не можете делать междоменные XML-запросы. В двух словах, для обработки любого XML с использованием jQuery вы просто циклически просматриваете коллекцию узлов, используя их имена «тегов», и захватываете их содержимое, которое впоследствии можно изменить по своему усмотрению…

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

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
    <head>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript">
        </script>
        <script>
            //This example shows getting a local ATOM file. I am assuming that you will be using a proxy to fetch the feed as you 
            //are getting it from a remote source

            //get the feed
            $.get("feed.xml", function(data){

                //if XML loaded successfully find all blog entries
                html = "";
                $(data).find("entry").each(function(){

                    //get text for title and the content 
                    title = $(this).find("title").text();

                    content = $(this).find("content").text()

                    //create your own html
                    html += "<h1>" + title + "</h1>";
                    html += "<div class='blogEntry'>" + content + "</div>"

                })
                //append html to the container of yor choice
                $(".blogClone").append(html)
            })

        </script>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
        <title>Untitled Document</title>
    </head>
    <body>
        <div class="blogClone">
        </div>
    </body>
</html>

Если вы используете PHP на своем сервере, это простой прокси-скрипт, который вам понадобится

<?php
// PHP Proxy
// Responds to both HTTP GET and POST requests
//
// Author: Abdul Qabiz
// March 31st, 2006
//

// Get the url of to be proxied
// Is it a POST or a GET?
$url = ($_POST['url']) ? $_POST['url'] : $_GET['url'];
$headers = ($_POST['headers']) ? $_POST['headers'] : $_GET['headers'];
$mimeType = ($_POST['mimeType']) ? $_POST['mimeType'] : $_GET['mimeType'];

//Start the Curl session
$session = curl_init($url);

// If it's a POST, put the POST data in the body
if ($_POST['url']) {
    $postvars = '';
    while ($element = current($_POST)) {
        $postvars .= key($_POST).'='.$element.'&';
        next($_POST);
    }

    curl_setopt($session, CURLOPT_POST, true);
    curl_setopt($session, CURLOPT_POSTFIELDS, $postvars);
}

// Don't return HTTP headers. Do return the contents of the call
curl_setopt($session, CURLOPT_HEADER, ($headers == "true") ? true : false);

curl_setopt($session, CURLOPT_FOLLOWLOCATION, true);
//curl_setopt($ch, CURLOPT_TIMEOUT, 4);
curl_setopt($session, CURLOPT_RETURNTRANSFER, true);

// Make the call
$response = curl_exec($session);

if ($mimeType != "") {
    // The web service returns XML. Set the Content-Type appropriately
    header("Content-Type: ".$mimeType);
}

echo $response;

curl_close($session);

?>
...