Форум Joomla! Україна

Повна версія: Парсер с сайта на Joomla
Ви переглядаєте спрощену версію. Переглянути повну версію з віповідним форматуванням.
Доброе время суток,

Есть сайт на Joomla 1.5
Нужно: файл к которому я могу обратится и он вернет мне все материалы из указанной категории

Я раньше никогда не работал с JSON, буду очень благодарен если знающие люди напишут максимально простой парсес (по возможности с комментариями)
А позвольте уточнить преследуемую задачу?
Вам нужно с Вашего же сайта получить данные?
minamo Написав:А позвольте уточнить преследуемую задачу?
Вам нужно с Вашего же сайта получить данные?
Да, я хочу выгружать данные в другое место
Я бы делал через xml-файл.

Например, если Вы знаете, что переодичность добавления новых материалов 1 раз в сутки, ставите на cron задачу с такой же переодичностью, в которой прямым запросом в БД выбираете нужные материалы из нужной категории. Результаты записываете в xml-файл.

Пример выгрузки из JoomShopping
Код:
<?php
    define( '_JEXEC', 1 );
    define('JPATH_BASE', dirname(__FILE__) );
    define( 'DS', DIRECTORY_SEPARATOR );
    require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
    require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );
    $mainframe = JFactory::getApplication('site');
    require_once (JPATH_SITE.'/components/com_jshopping/lib/factory.php');
    require_once (JPATH_SITE.'/components/com_jshopping/lib/functions.php');
    $query = "SELECT prod.product_id, pr_cat.category_id, prod.`name_cs-CZ` as name, prod.`short_description_cs-CZ` as short_description, prod.product_ean, prod.image, prod.product_price, prod.currency_id, prod.product_tax_id as tax_id, prod.product_old_price, prod.product_weight, prod.average_rating, prod.reviews_count, prod.hits, prod.weight_volume_units, prod.basic_price_unit_id, prod.label_id, prod.product_manufacturer_id, prod.min_price, prod.product_quantity, prod.different_prices, prod.delivery_times_id FROM `#__jshopping_products` AS prod INNER JOIN `#__jshopping_products_to_categories` AS pr_cat ON pr_cat.product_id = prod.product_id LEFT JOIN `#__jshopping_categories` AS cat ON pr_cat.category_id = cat.category_id WHERE prod.product_publish = '1' AND cat.category_publish='1' AND prod.access IN (1,1) AND cat.access IN (1,1) GROUP BY prod.product_id ORDER BY prod.product_id DESC";
    $db = JFactory::getDBO();
    $db->setQuery($query);
    $gmData = $db->loadObjectList();
    $homeURL = substr(JURI::base(), 0, -1);
    $imgURL = $homeURL.'/components/com_jshopping/files/img_products/';
    
    //get Brand's name
    $brandQuery = "SELECT #__jshopping_manufacturers.manufacturer_id as brandID, #__jshopping_manufacturers.`name_cs-CZ` as brandName FROM #__jshopping_manufacturers";
    $db->setQuery($brandQuery);
    $brandList = $db->loadAssocList();
    
    $xml = '<SHOP>';

    foreach($gmData as $product) {    
    $price = round($product->product_price, 2);
    $productURL = $homeURL.SEFLink('index.php?option=com_jshopping&amp;controller=product&amp;task=view&amp;category_id='.$product->category_id.'&amp;product_id='.$product->product_id, 1);
    // get current category name
    $curretCatQuery = "SELECT #__jshopping_categories.category_id as catID, #__jshopping_categories.category_parent_id as parentID, #__jshopping_categories.`name_cs-CZ` as catName FROM #__jshopping_categories WHERE #__jshopping_categories.category_publish =  '1' AND #__jshopping_categories.category_id = '".$product->category_id."'";
    $db->setQuery($curretCatQuery);
    $curretCat = $db->loadRow();
    $cName_1 = $curretCat[2];

    if ($curretCat[1] != 0) {
        $cName_2_Query = "SELECT #__jshopping_categories.category_id as catID, #__jshopping_categories.category_parent_id as parentID, #__jshopping_categories.`name_cs-CZ` as catName FROM #__jshopping_categories WHERE #__jshopping_categories.category_publish =  '1' AND #__jshopping_categories.category_id = '".$curretCat[1]."'";
        $db->setQuery($cName_2_Query);
        $cName_2_res = $db->loadRow();
        $cName_2 = $cName_2_res[2].' | ';
        
        if ($cName_2_res[1] != 0) {
            $cName_3_Query = "SELECT #__jshopping_categories.category_id as catID, #__jshopping_categories.category_parent_id as parentID, #__jshopping_categories.`name_cs-CZ` as catName FROM #__jshopping_categories WHERE #__jshopping_categories.category_publish =  '1' AND #__jshopping_categories.category_id = '".$cName_2_res[1]."'";
            $db->setQuery($cName_3_Query);
            $cName_3_res = $db->loadRow();
            $cName_3 = $cName_3_res[2].' | ';
            
                if ($cName_3_res[1] != 0) {
                    $cName_4_Query = "SELECT #__jshopping_categories.category_id as catID, #__jshopping_categories.category_parent_id as parentID, #__jshopping_categories.`name_cs-CZ` as catName FROM #__jshopping_categories WHERE #__jshopping_categories.category_publish =  '1' AND #__jshopping_categories.category_id = '".$cName_3_res[1]."'";
                    $db->setQuery($cName_4_Query);
                    $cName_4_res = $db->loadRow();
                    $cName_4 = $cName_4_res[2].' | ';
                }

        }
        
    }
    $product_type = $cName_4.$cName_3.$cName_2.$cName_1;
    $xml .= '<SHOPITEM>';
    $xml .= '<PRODUCT>'.htmlspecialchars($product->name).'</PRODUCT>';
    $xml .= '<DESCRIPTION>'.$product->short_description.'</DESCRIPTION>';
    $xml .= '<URL>'.$productURL.'</URL>';
    $xml .= '<IMGURL>'.$imgURL.$product->image.'</IMGURL>';
    $xml .= '<PRICE>'.$price.'</PRICE>';
    $xml .= '<VAT>0,21</VAT>';
    $xml .= '<DELIVERY_DATE>0</DELIVERY_DATE>';    
    foreach ($brandList as $row) {
        if($row['brandID'] == $product->product_manufacturer_id) {
            $productBrand = $row['brandName'];
        }
    }
    if (!isset($productBrand)) {
        $productBrand = 'Brand';
    }
    $xml .= '<MANUFACTURER><![CDATA['.$productBrand.']]></MANUFACTURER>';
    $xml .= '<ITEM_TYPE>new</ITEM_TYPE>';
    if ((is_numeric($product->product_ean)) && ((strlen($str) > 7) && (strlen($str) < 14 ))) {
        $xml .= '<EAN>'.$product->product_ean.'</EAN>';
    }
    $xml .= '<CATEGORYTEXT>'.$product_type.'</CATEGORYTEXT>';
    $xml .= '</SHOPITEM>';
}        
    $xml .= '</SHOP>';

    
    $sxe = simplexml_load_string($xml);
    
    if ($sxe === false) {
        echo 'Error while parsing the document';
    }

    $dom_sxe = dom_import_simplexml($sxe);
    if (!$dom_sxe) {
        echo 'Error while converting XML';
    }
    
    $dom = new DOMDocument('1.0', 'UTF-8');
    $dom_sxe = $dom->importNode($dom_sxe, true);
    $dom_sxe = $dom->appendChild($dom_sxe);
    echo $dom->save('xmldata/seznam.xml');
?>
Ну и на нужном сайте читаете нужный xml-файл и либо выводите данные напрямую, либо пишите в БД и работаете с данными уже из нее.
Я хочу сделать это через JSON средствами Joomla, что бы я сделал запрос "Дай мне материалы", а в ответ получил массив данных у которых есть заголовок, дата создания и текст
А нагрузка?
А нагрузка???

rogabob

ищите в гугле "curl php".
Я так делал, все работалоSmile
или
_http://query.yahooapis.com/
я бы дал примеры, но потерял. в гугле полно инфы :beer: