Парсер с сайта на Joomla

Різноманітні грабери для Joomla!
karsa
Користувач
Користувач
Повідомлень: 4
З нами з: 17 травня 2012, 12:27

Парсер с сайта на Joomla

Повідомлення karsa » 08 серпня 2014, 22:03

Доброе время суток,

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

Я раньше никогда не работал с JSON, буду очень благодарен если знающие люди напишут максимально простой парсес (по возможности с комментариями)

minamo
Користувач
Користувач
Повідомлень: 85
З нами з: 09 липня 2014, 11:11
Звідки: UA, Kharkiv
Подякували: 5 рази

Re: Парсер с сайта на Joomla

Повідомлення minamo » 09 серпня 2014, 10:42

А позвольте уточнить преследуемую задачу?
Вам нужно с Вашего же сайта получить данные?
karsa
Користувач
Користувач
Повідомлень: 4
З нами з: 17 травня 2012, 12:27

Re: Парсер с сайта на Joomla

Повідомлення karsa » 09 серпня 2014, 11:50

minamo писав:А позвольте уточнить преследуемую задачу?
Вам нужно с Вашего же сайта получить данные?
Да, я хочу выгружать данные в другое место
minamo
Користувач
Користувач
Повідомлень: 85
З нами з: 09 липня 2014, 11:11
Звідки: UA, Kharkiv
Подякували: 5 рази

Re: Парсер с сайта на Joomla

Повідомлення minamo » 11 серпня 2014, 10:30

Я бы делал через 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-файл и либо выводите данные напрямую, либо пишите в БД и работаете с данными уже из нее.
karsa
Користувач
Користувач
Повідомлень: 4
З нами з: 17 травня 2012, 12:27

Re: Парсер с сайта на Joomla

Повідомлення karsa » 12 серпня 2014, 11:17

Я хочу сделать это через JSON средствами Joomla, что бы я сделал запрос "Дай мне материалы", а в ответ получил массив данных у которых есть заголовок, дата создания и текст

minamo
Користувач
Користувач
Повідомлень: 85
З нами з: 09 липня 2014, 11:11
Звідки: UA, Kharkiv
Подякували: 5 рази

Re: Парсер с сайта на Joomla

Повідомлення minamo » 12 серпня 2014, 11:22

А нагрузка?
gloriatorios
Користувач
Користувач
Повідомлень: 2
З нами з: 12 грудня 2014, 10:18
Звідки: Kiev

Re: Парсер с сайта на Joomla

Повідомлення gloriatorios » 12 грудня 2014, 10:29

А нагрузка???
rogabob

Re: Парсер с сайта на Joomla

Повідомлення rogabob » 05 січня 2015, 21:26

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


  • Similar Topics
    Відповіді
    Перегляди
    Останнє повідомлення

Повернутись до “Joomla! грабери”

Хто зараз онлайн

Зараз переглядають цей форум: 0 і 0 гостей