Commit 81eb3603 authored by Andrius Mickus's avatar Andrius Mickus

Change to import from json

parent 8685beb2
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="PublishConfigData">
<serverData>
<paths name="Budget">
<serverdata>
<mappings>
<mapping local="$PROJECT_DIR$" web="/" />
</mappings>
</serverdata>
</paths>
<paths name="Oltranet-CAT">
<serverdata>
<mappings>
<mapping local="$PROJECT_DIR$" web="/" />
</mappings>
</serverdata>
</paths>
<paths name="Skubis">
<serverdata>
<mappings>
<mapping local="$PROJECT_DIR$" web="/" />
</mappings>
</serverdata>
</paths>
<paths name="Taxi">
<serverdata>
<mappings>
<mapping local="$PROJECT_DIR$" web="/" />
</mappings>
</serverdata>
</paths>
<paths name="bioetika">
<serverdata>
<mappings>
<mapping local="$PROJECT_DIR$" web="/" />
</mappings>
</serverdata>
</paths>
<paths name="biuro-dev">
<serverdata>
<mappings>
<mapping local="$PROJECT_DIR$" web="/" />
</mappings>
</serverdata>
</paths>
<paths name="biuro-export">
<serverdata>
<mappings>
<mapping local="$PROJECT_DIR$" web="/" />
</mappings>
</serverdata>
</paths>
<paths name="brabemanning">
<serverdata>
<mappings>
<mapping local="$PROJECT_DIR$" web="/" />
</mappings>
</serverdata>
</paths>
<paths name="dev.biuro">
<serverdata>
<mappings>
<mapping local="$PROJECT_DIR$" web="/" />
</mappings>
</serverdata>
</paths>
<paths name="etime">
<serverdata>
<mappings>
<mapping local="$PROJECT_DIR$" web="/" />
</mappings>
</serverdata>
</paths>
<paths name="laravel">
<serverdata>
<mappings>
<mapping local="$PROJECT_DIR$" web="/" />
</mappings>
</serverdata>
</paths>
<paths name="laravelangular">
<serverdata>
<mappings>
<mapping local="$PROJECT_DIR$" web="/" />
</mappings>
</serverdata>
</paths>
<paths name="olClone">
<serverdata>
<mappings>
<mapping local="$PROJECT_DIR$" web="/" />
</mappings>
</serverdata>
</paths>
<paths name="olExternal">
<serverdata>
<mappings>
<mapping local="$PROJECT_DIR$" web="/" />
</mappings>
</serverdata>
</paths>
<paths name="oltranet">
<serverdata>
<mappings>
<mapping local="$PROJECT_DIR$" web="/" />
</mappings>
</serverdata>
</paths>
<paths name="oltranet (1)">
<serverdata>
<mappings>
<mapping local="$PROJECT_DIR$" web="/" />
</mappings>
</serverdata>
</paths>
<paths name="oltranet2">
<serverdata>
<mappings>
<mapping local="$PROJECT_DIR$" web="/" />
</mappings>
</serverdata>
</paths>
<paths name="servy">
<serverdata>
<mappings>
<mapping local="$PROJECT_DIR$" web="/" />
</mappings>
</serverdata>
</paths>
<paths name="sms_proxy">
<serverdata>
<mappings>
<mapping local="$PROJECT_DIR$" web="/" />
</mappings>
</serverdata>
</paths>
<paths name="test.app">
<serverdata>
<mappings>
<mapping local="$PROJECT_DIR$" web="/" />
</mappings>
</serverdata>
</paths>
<paths name="testCI">
<serverdata>
<mappings>
<mapping local="$PROJECT_DIR$" web="/" />
</mappings>
</serverdata>
</paths>
</serverData>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<module type="WEB_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding" addBOMForNewFiles="with NO BOM" />
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="JavaScriptSettings">
<option name="languageLevel" value="ES6" />
</component>
<component name="NodePackageJsonFileManager">
<packageJsonPaths />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/dev.biuro.iml" filepath="$PROJECT_DIR$/.idea/dev.biuro.iml" />
</modules>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="PhpCodeSniffer">
<phpcs_settings>
<PhpCSConfiguration tool_path="C:/cygwin64/home/AndriusMickus/.composer/vendor/squizlabs/php_codesniffer/scripts/phpcs" />
</phpcs_settings>
</component>
</project>
\ No newline at end of file
This diff is collapsed.
......@@ -10,7 +10,8 @@ class DataCollector
{
// Data mapping
protected $dataMap = [
'livas-id' => '@livas_id',
// 'lang' => '@lang',
'livas_id' => '@livas_id',
'valid' => '@valid',
'division' => 'division',
'name' => 'title',
......@@ -25,7 +26,6 @@ class DataCollector
'contact' => 'contact',
'post_date' => '@published_date',
'post_modified' => '@updated',
'lang' => '@lang',
];
// Relations mapping
......@@ -120,12 +120,15 @@ class DataCollector
if (array_key_exists($this->containerTag, $parsedData)) {
$container = $parsedData[$this->containerTag];
if (array_key_exists($this->elementTag, $container)) {
foreach ($container[$this->elementTag] as $elementData) {
$lang = $elementData['@lang'];
var_dump($elementData);
$lang = $container[$this->elementTag]['@lang'];
$element = [];
foreach ($this->dataMap as $key => $item) {
$itemValue = (empty($elementData[$item])) ? '' : $elementData[$item];
var_dump($itemValue);
$value = (is_array($itemValue))
? [$this->getKey($key, $itemValue, $lang) => html_entity_decode($this->getValue($itemValue))]
: html_entity_decode($itemValue);
......@@ -142,6 +145,7 @@ class DataCollector
}
}
var_dump($transformed);
$this->data = $transformed;
}
......@@ -213,7 +217,6 @@ class DataCollector
*/
function xmlToArray($xml, $options = array())
{
$options = array_merge($this->parserDefaults, $options);
$namespaces = $xml->getDocNamespaces();
$namespaces[''] = null; //add base (empty) namespace
......
<?php
class JsonDataCollector
{
// Job properties data map
protected $properties = [
'livas-id' => 'id',
'valid' => 'galioja',
'post_date' => 'data',
'post_modified' => 'atnaujinta',
'title' => 'pareigos',
'post_content' => 'aprasymas',
// 'email' => 'email',
// 'work_time' => 'darbo_laikas',
// 'contact' => 'kontaktai',
];
// Taxonomies data map
protected $terms = [
'city' => [
'slug' => 'miestas_id',
'name' => 'regionas'
],
'field' => [
'slug' => 'kategorija',
'name' => 'sritis'
],
'company' => [
'name' => 'imone'
],
'type' => [
'slug' => 'type',
'name' => 'type'
]
// 'tag'
// 'position',
];
// Custom posts data map
protected $posts = [
'division' => [
'title' => 'padalinys_name',
'slug' => 'padalinys'
]
];
// Language map
protected $lang = 'kalba';
// Relations mapping
protected $relationsMap = [
'division-id' => 'division',
];
// Source data
protected $sourceData;
protected $data;
public function __construct($source)
{
$this->setData($source);
$this->data = $this->transformData();
}
/**
* Set data source:
* get data from source and transform into array
*
* @param $source
*/
protected function setData($source)
{
$this->sourceData = $this->loadData($source);
}
/**
* Parse xml data
*
* @param $source
*
* @return SimpleXMLElement
*/
protected function loadData($source)
{
$context = stream_context_create([
'http' => [
'header' => 'Accept: application/json',
],
'ssl' => [
'verify_peer' => false,
'verify_peer_name' => false,
],
]);
$json = file_get_contents($source, false, $context);
return json_decode($json);
}
/**
* Get data
*
* @return mixed
*/
public function getData()
{
return $this->data;
}
protected function transformData()
{
$result = [];
foreach ($this->sourceData as $ad) {
$item = [];
$item['properties'] = $this->getProperties($ad);
$item['lang'] = $ad->{$this->lang};
$item['terms'] = $this->getTerms($ad);
$item['posts'] = $this->getPosts($ad);
$item['relations'] = $this->relationsMap;
// foreach ($this->dataMap as $mapKey => $dataKey) {
// $dataValue = $ad->{$dataKey};
// $itemValue = $this->getValue($dataValue);
// $postValue = $this->getValue($dataValue);
// $item[$mapKey] = $itemValue;
//
//// if (array_key_exists($mapKey, $this->relationsMap)) {
//// $item['related_items'][$mapKey] = $this->relationsMap[$mapKey];
//// }
// }
//
// foreach ($this->relationsMap as $keyItem => $valueItem) {
// if (array_key_exists($keyItem, $item) && array_key_exists($valueItem, $item)) {
// $item[$valueItem] = [$valueItem . '_' . $item[$keyItem] => $item[$valueItem]];
// unset($item[$keyItem]);
// }
// }
$result[] = $item;
};
return $result;
}
private function getProperties($ad)
{
$result = [];
foreach ($this->properties as $propertyKey => $propertyValue) {
if (isset($ad->{$propertyValue}))
$dataValue = $ad->{$propertyValue};
$result[$propertyKey] = $this->getValue($dataValue);
}
return $result;
}
private function getTerms($ad)
{
$result = [];
foreach ($this->terms as $termKey => $termProperties) {
foreach ($termProperties as $propertyKey => $propertyValue) {
if (isset($ad->{$propertyValue})) {
$dataValue = $ad->{$propertyValue};
$result[$termKey][$propertyKey] = $this->getValue($dataValue);
}
}
}
return $result;
}
private function getPosts($ad)
{
$result = [];
foreach ($this->posts as $postKey => $postProperties) {
foreach ($postProperties as $propertyKey => $propertyValue) {
if (isset($ad->{$propertyValue})) {
$dataValue = $ad->{$propertyValue};
$result[$postKey][$propertyKey] = $this->getValue($dataValue);
}
}
}
return $result;
}
private function getValue($value)
{
return (is_array($value)) ? $value : html_entity_decode($value);
}
}
\ No newline at end of file
<?php
abstract class Model {
protected $type;
protected $slug;
protected $value;
public function setSlug($slug = null)
{
}
}
\ No newline at end of file
......@@ -8,7 +8,7 @@ Version: 1.0.0
set_time_limit(300);
// Data collector: prepare data for import
require_once 'DataCollector.php';
require_once 'JsonDataCollector.php';
// Data importer: imports data to WP posts
require_once 'JobsImporter.php';
......@@ -58,8 +58,10 @@ function do_import()
echo "<br><br>";
print_r("Data source: $inputFile<br>");
// XML reader
$ads = (new DataCollector($inputFile))->getData();
// JSON reader
$ads = (new JsonDataCollector($inputFile))->getData();
// var_dump($ads);
// exit();
print_r("Found " . count($ads) . " ads from Biuro.<br>");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment