Jump to content

Импорт YA.MARKET


Recommended Posts

При импорте Яндекс-Маркет импорт/экспорт файла http://personal.cab/api/v1/?key=bgeh1vbhy3oq52xfj2bp&method=get_products&type=yml Происходит загрузка товара но без скачивания картинок, как быть?

 

Link to post
Share on other sites
32 минуты назад, ZM сказал:

При импорте Яндекс-Маркет импорт/экспорт файла http://personal.cab/api/v1/?key=bgeh1vbhy3oq52xfj2bp&method=get_products&type=ymlПроисходит загрузка товара но без скачивания картинок, как быть?

 

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

Надо либо написать скрипт, который выкачает все картинки указанные из yml файла и положить их затем в поддиректории внутри /images/product_images

Либо найти готовый софт, который умеет выкачивать файлы указанные в xml файле.

  • Like 1
Link to post
Share on other sites

Что нужно дописать в yml_import.php чтобы вытащить строчку из yml (model) чтобы артикул добавить хотя бы

Сделал сам, спасибо кому надо..

<?php
/* --------------------------------------------------------------
   $Id: yml_import.php,v 1.1 2010-08-06 17:36:57 VaM $

   VaM Shop - open source ecommerce solution
   http://vamshop.ru
   http://vamshop.com

   Copyright (c) 2010 VaMSoft Ltd.
   --------------------------------------------------------------
   Released under the GNU General Public License
   --------------------------------------------------------------*/
   
function unhtmlentities($string) {
  $trans_tbl = get_html_translation_table(HTML_ENTITIES);
  $trans_tbl = array_flip ($trans_tbl);
  return strtr ($string, $trans_tbl);
}

require('includes/application_top.php');

if ($_POST['action']=='import') {
  if (is_uploaded_file($_FILES['xml_file']['tmp_name'])) {


$xml = simplexml_load_file($_FILES['xml_file']['tmp_name']);

    $count=0;
    $count_upd=0;
    $count_add=0;
    $count_cat_upd=0;
    $count_cat_add=0;
    
    // Categories import
    
    foreach ($xml->shop->categories->category as $category) {

      $categories_id = $category['id'];
      $parent_id = ((!isset($category['parentId'])) ? 0 : $category['parentId']);
      $categories_name = unhtmlentities($category);
      $categories_description = '';

      $categories_query = vam_db_query("select categories_name from " . TABLE_CATEGORIES_DESCRIPTION . " where categories_id = '" . $categories_id . "' and language_id = '".$_SESSION['languages_id']."' limit 1");
      if (vam_db_num_rows($categories_query)) {
        $row=vam_db_fetch_array($categories_query);
        if ($row['categories_name']!=$categories_name) {
          vam_db_perform(TABLE_CATEGORIES, array('last_modified' => 'now()', 'parent_id' => $parent_id, 'categories_status' => 1, 'group_permission_0' => 1, 'group_permission_1' => 1, 'group_permission_2' => 1, 'group_permission_3' => 1, 'date_added' => 'now()'), 'update', 'categories_id=\''.$categories_id.'\'');
          vam_db_perform(TABLE_CATEGORIES_DESCRIPTION, array('categories_name' => $categories_name, 'categories_description' => $categories_description), 'update', 'categories_id=\''.$categories_id.'\' and language_id=\''.$_SESSION['languages_id'].'\'');
          $count_cat_upd++;
        }
      } else {
          vam_db_perform(TABLE_CATEGORIES, array('categories_id' => $categories_id, 'last_modified' => 'now()', 'parent_id' => $parent_id, 'categories_status' => 1, 'group_permission_0' => 1, 'group_permission_1' => 1, 'group_permission_2' => 1, 'group_permission_3' => 1, 'date_added' => 'now()'));
          vam_db_perform(TABLE_CATEGORIES_DESCRIPTION, array('categories_id' => $categories_id, 'categories_name' => $categories_name, 'categories_description' => $categories_description));
        $count_cat_add++;
      }
      
    }
        
    // Products import

    foreach ($xml->shop->offers->offer as $product) {
    	
      $products_id = $product['id'];
      $products_quantity = (($product['available']) ? 0 : 10000);
      $products_price = $product->price;
      $products_model = $product->model;
      $categoryId = $product->categoryId;
      $products_image = substr(strrchr($product->picture, "/"), 1);
      $products_name = unhtmlentities($product->name);
      $products_model = unhtmlentities($product->model);
      $products_description = unhtmlentities($product->description);
      $products_status = 1;

      $products_query = vam_db_query("select products_id, products_price from " . TABLE_PRODUCTS . " where products_id = '" . $products_id . "' limit 1");
      if (vam_db_num_rows($products_query)) {
        $row=vam_db_fetch_array($products_query);
        if ($row['products_price']!=$products_price) {
          vam_db_perform(TABLE_PRODUCTS, array('products_last_modified' => 'now()', 'products_price' => $products_price, 'products_model' => $products_model, 'products_image' => $products_image, 'group_permission_0' => 1, 'group_permission_1' => 1, 'group_permission_2' => 1, 'group_permission_3' => 1, 'products_startpage' => 1, 'products_status' => $products_status, 'products_quantity' => $products_quantity, 'products_date_available' => 'now()'), 'update', 'products_id=\''.$products_id.'\'');
          vam_db_perform(TABLE_PRODUCTS_DESCRIPTION, array('products_name' => $products_name, 'products_description' => $products_description), 'update', 'products_id=\''.$products_id.'\' and language_id=\''.$_SESSION['languages_id'].'\'');
          $count_upd++;
        }
      } else {
        vam_db_perform(TABLE_PRODUCTS, array('products_id' => $products_id, 'products_last_modified' => 'now()', 'products_price' => $products_price, 'products_model' => $products_model, 'products_image' => $products_image, 'group_permission_0' => 1, 'group_permission_1' => 1, 'group_permission_2' => 1, 'group_permission_3' => 1, 'products_startpage' => 1, 'products_status' => $products_status, 'products_quantity' => $products_quantity, 'products_date_available' => 'now()'));
        vam_db_perform(TABLE_PRODUCTS_DESCRIPTION, array('products_id' => $products_id, 'products_name' => $products_name, 'products_description' => $products_description, 'language_id' => $_SESSION['languages_id']));
        vam_db_perform(TABLE_PRODUCTS_TO_CATEGORIES, array('products_id' => $products_id, 'categories_id' => $categoryId));
        $count_add++;
      }
      $count++;
    }
    $messageStack->add_session(TEXT_YML_UPDATED.$count_upd, 'success');
    $messageStack->add_session(TEXT_YML_CHANGED.($count-$count_upd), 'success');
    $messageStack->add_session(TEXT_YML_ADDED.$count_add, 'success');
    $messageStack->add_session(TEXT_YML_CAT_ADDED.$count_cat_add, 'success');
    $messageStack->add_session(TEXT_YML_CAT_UPDATED.$count_cat_upd, 'success');
  } else {
    $messageStack->add_session(TEXT_YML_ERROR, 'error');
  }

  vam_redirect(vam_href_link(FILENAME_YML_IMPORT));
}

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html <?php echo HTML_PARAMS; ?>>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=<?php echo $_SESSION['language_charset']; ?>"> 
<title><?php echo TITLE; ?></title>
<link rel="stylesheet" type="text/css" href="includes/stylesheet.css">
<script type="text/javascript" src="includes/general.js"></script>
</head>
<body marginwidth="0" marginheight="0" topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0" bgcolor="#FFFFFF">
<!-- header //-->
<?php require(DIR_WS_INCLUDES . 'header.php'); ?>
<!-- header_eof //-->

<!-- body //-->
<table border="0" width="100%" cellspacing="2" cellpadding="2">
  <tr>
<?php if (ADMIN_DROP_DOWN_NAVIGATION == 'false') { ?>
    <td width="<?php echo BOX_WIDTH; ?>" align="left" valign="top">
<!-- left_navigation //-->
<?php require(DIR_WS_INCLUDES . 'column_left.php'); ?>
<!-- left_navigation_eof //-->
    </td>
<?php } ?>
<!-- body_text //-->
    <td class="boxCenter" valign="top"><table border="0" width="100%" cellspacing="0" cellpadding="2">
      <tr>
        <td class="main">
        
    <h1 class="contentBoxHeading"><?php echo HEADING_TITLE; ?></h1>
            
        <table border="0" width="100%" cellspacing="0" cellpadding="0">
         
          <tr>
        <td class="main">
          <?php echo vam_draw_form('xml_import', FILENAME_YML_IMPORT, '', 'post', 'enctype="multipart/form-data"') ."\n". vam_draw_file_field('xml_file') ."\n"; ?>
          <input type="hidden" name="action" value="import">
          <br>
          <?php echo TEXT_YML_MAX_SIZE; ?> <b><?php echo ini_get('upload_max_filesize'); ?></b><br />
          <span class="button"><button type="submit" value="<?php echo TEXT_YML_IMPORT; ?>"><?php echo vam_image(DIR_WS_IMAGES . 'icons/buttons/import.png', '', '12', '12'); ?>&nbsp;<?php echo TEXT_YML_IMPORT; ?></button>
          </form>
        </td>
        <td class="main" width="50%" valign="bottom">
          <a class="button" href="<?php echo HTTP_SERVER . DIR_WS_CATALOG.'market.php'; ?>" target="_blank"><span><?php echo vam_image(DIR_WS_IMAGES . 'icons/buttons/export.png', '', '12', '12'); ?>&nbsp;<?php echo TEXT_YML_EXPORT; ?></span></a>
        </td>
      </tr>
    </table></td>
<!-- body_text_eof //-->
  </tr>
</table>
<!-- body_eof //-->

<!-- footer //-->
<?php require(DIR_WS_INCLUDES . 'footer.php'); ?>
<!-- footer_eof //-->
<br>
</body>
</html>
<?php require(DIR_WS_INCLUDES . 'application_bottom.php'); ?>

 

  • Like 1
Link to post
Share on other sites

Кто знает откуда взять код для сохранения картинок? Может кто подскажет? Есть добрые люди? 

Link to post
Share on other sites
29 минут назад, ZM сказал:

Кто знает откуда взять код для сохранения картинок? Может кто подскажет? Есть добрые люди? 

Нужно php немного знать, иначе ж ничего сделать не получится.

Link to post
Share on other sites

Ну я же как то сделал вывод модели для этого Yml может и парсер получится влепить, хотя бы где похожее что-то есть может на других движках реализовано? Там есть еще api через Key и тд но я х3 как такое сварганить

Link to post
Share on other sites

Есть гугл с кучей примеров.

Вполне можно найти рабочий.

Например можно просто file_get_contents использовать, подставив адрес картинки из тэга picture и сохранив этот файл на диск.

http://php.net/manual/en/function.file-get-contents.php

Link to post
Share on other sites
Только что, ZM сказал:

ок буду пробывать спасибо

Вот первая попавшаяся ссылка - http://qaru.site/questions/20309/saving-image-from-php-url

Вот прям внутри foreach вставляете file_put_contents и указываете адрес картинки из picture тэга

Link to post
Share on other sites

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

 

// страница с картинками
$text = file_get_contents("http://personal.cab/api/v1/?key=bgeh1vbhy3oq52xfj2bp&method=get_products&rrp=on&type=yml");
 
// выцеливаем путь к картинкам и помещаем их в массив
preg_match_all("'<img\s+src=\"(\S*.(png|jpg))\"'si", $text, $result);      
 
echo"Найдено картинок на странице = ".count($result[1]);
//print_r($result[1]); // найденные картинки
echo("<br>");
echo("<br>");
echo("Urls - картинок...");
// создаём папку если таковой нет
if (!file_exists("imagess")) 
{
   mkdir("imagess", 0700); // создаём папку
}
 
$move_dir = "imagess/"; // Директория созданной папки
for($i = 0; $i <=(count($result[1])-1); $i++) 
{
// формируем урл на картинку    
$url = "http://personal.cab/api/v1/?key=bgeh1vbhy3oq52xfj2bp&method=get_products&rrp=on&type=yml".$result[1][$i]; 
echo("<br>");
echo($url);
echo("<br>");
$filename = basename($url); // Имя картинки 
file_put_contents($move_dir.'/'.$filename, file_get_contents($url));    
}
echo("<br>");
echo("Копирование завершено!");

 

Link to post
Share on other sites

Это неправильный код.

У Вас в yml файле картинки в  тэге picture

Причём тут img src ...

Link to post
Share on other sites

Жаль что тут не хватает людей кто бы помогал разбираться с такими вопросами, раньше на форуме шопос было много добрых людей )

Link to post
Share on other sites

Так не бывает ведь, что б полностью за Вас код писали.

Можно лишь подсказать, куда копать и как копать, но копать Вам.

Либо создайте тему в разделе Коммерческие предложения, наверняка найдутся желающие.

Link to post
Share on other sites

Подсказки помогли бы мне обучится и сделать общее доброе дело, умел бы писать на php кучу плагинов бы сделал для vamshop только вот вам это может быть не итересно, ладно тему оставим пока может кто найдется кто подскажет что еще можно сделать, выбирая параметры url picture он все равно не находит. Задал вопрос на другом форуме. 

Link to post
Share on other sites
13 минут назад, ZM сказал:

Подсказки помогли бы мне обучится и сделать общее доброе дело, умел бы писать на php кучу плагинов бы сделал для vamshop только вот вам это может быть не итересно, ладно тему оставим пока может кто найдется кто подскажет что еще можно сделать, выбирая параметры url picture он все равно не находит. Задал вопрос на другом форуме. 

Я Вам и так подсказал достаточно, даже дал ссылку на сайт где на 90% готовый пример.

Вы ж зачем-то какой-то свой код принесли, не подходящий под Вашу ситуацию.

 

Link to post
Share on other sites
×
×
  • Create New...