Skip to content

Instantly share code, notes, and snippets.

@mavitm
Last active October 26, 2016 09:49
Show Gist options
  • Save mavitm/8fa27c74550c58eaf23c125829ac4065 to your computer and use it in GitHub Desktop.
Save mavitm/8fa27c74550c58eaf23c125829ac4065 to your computer and use it in GitHub Desktop.
Booking.com tsv parser
<?php
/*/
use Storage;
use BackendMenu;
use Backend\Classes\Controller;
use Mavitm\Hotel\Models\Hotel;
use Mavitm\Hotel\Models\Desc;
use Illuminate\Database\QueryException;
/**/
function tsvImport($p = ""){
$data = Storage::get("/tsv/Asia_3.tsv"); //$p set
$arr = explode("\n", $data);
$dbTsv = [];
$x = 0;
foreach($arr as $line){
$lineArr = explode("\t", $line);
$dbTsv[$x] = $lineArr;
$x++;
}
$first = $dbTsv[0];
unset($dbTsv[0]);
unset($first[count($first) -1]);
$fields = array_flip($first);
$dbAttr = [];
$descIndexes = [];
foreach($fields as $f=>$i){
if(strpos($f, "desc") !== false){
$descIndexes[$i] = explode('_',$f)[1];
}else{
$dbAttr[$i] = $f;
}
}
$this->vars['data'] = $dbTsv;
$this->vars['descIndexes'] = $descIndexes;
$this->vars['attr'] = $dbAttr;
foreach ($dbTsv as $i=>$v) {
if(@$v[5] == "tr"){
$Hotel = new Hotel;
foreach($dbAttr as $x=>$name){
if(empty($v[$x])){
if($name == "maxrate"){
$v[$x] = 0;
}elseif($name == "preferred"){
$v[$x] = 0;
}
}
$Hotel->$name = $v[$x];
}
try {
$Hotel->save();
if(!empty($descIndexes)){
$tagsIDs = [];
foreach($descIndexes as $si=>$ci){
$Desc = new Desc;
$Desc->hotel_id = $Hotel->id;
$Desc->cc1 = $ci;
$Desc->description = $v[$si];
$Desc->save();
$tagsIDs[] = $Desc->id;
}
}
$Hotel->desc()->sync($tagsIDs);
}catch (QueryException $e){
var_dump($e->getMessage());
}
}
}
}
?>
<?php namespace Mavitm\Hotel\Models;
use Model;
/**
* Model
*/
class Desc extends Model
{
/*
* Validation
*/
public $rules = [
];
/*
* Disable timestamps by default.
* Remove this line if timestamps are defined in the database table.
*/
public $timestamps = false;
/**
* @var string The database table used by the model.
*/
public $table = 'mavitm_hotel_desription';
public $belongsToMany = [
'hotel' => [
'Mavitm\Hotel\Models\Hotel',
'table' => 'mavitm_hotel_hotel_desc',
],
'items_count' => [
'Mavitm\Hotel\Models\Hotel',
'table' => 'mavitm_hotel_hotel_desc',
'count' => true
]
];
}
CREATE TABLE `mavitm_hotel_desription` (
`id` int(10) UNSIGNED NOT NULL,
`hotel_id` int(11) NOT NULL,
`cc1` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
`description` text COLLATE utf8_unicode_ci
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
--
-- Dökümü yapılmış tablolar için indeksler
--
--
-- Tablo için indeksler `mavitm_hotel_desription`
--
ALTER TABLE `mavitm_hotel_desription`
ADD PRIMARY KEY (`id`);
--
-- Dökümü yapılmış tablolar için AUTO_INCREMENT değeri
--
--
-- Tablo için AUTO_INCREMENT değeri `mavitm_hotel_desription`
--
ALTER TABLE `mavitm_hotel_desription`
MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT;
<?php namespace Mavitm\Hotel\Models;
use Model;
/**
* Model
*/
class Hotel extends Model
{
/*
* Validation
*/
public $rules = [
];
/*
* Disable timestamps by default.
* Remove this line if timestamps are defined in the database table.
*/
public $timestamps = false;
/**
* @var string The database table used by the model.
*/
public $table = 'mavitm_hotel_hotel';
public $belongsToMany = [
'desc' => [
'Mavitm\Hotel\Models\Desc',
'table' => 'mavitm_hotel_hotel_desc',
],
];
}
CREATE TABLE `mavitm_hotel_hotel` (
`id` int(10) UNSIGNED NOT NULL,
`name` varchar(250) COLLATE utf8_unicode_ci NOT NULL,
`address` varchar(250) COLLATE utf8_unicode_ci DEFAULT NULL,
`zip` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
`city_hotel` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
`cc1` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
`ufi` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
`class` double(3,2) DEFAULT NULL,
`currencycode` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL,
`minrate` decimal(10,2) DEFAULT NULL,
`maxrate` decimal(10,2) DEFAULT NULL,
`preferred` smallint(6) DEFAULT NULL,
`nr_rooms` smallint(6) DEFAULT NULL,
`longitude` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
`latitude` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
`public_ranking` int(11) DEFAULT NULL,
`hotel_url` varchar(250) COLLATE utf8_unicode_ci DEFAULT NULL,
`photo_url` varchar(250) COLLATE utf8_unicode_ci DEFAULT NULL,
`city_unique` varchar(250) COLLATE utf8_unicode_ci DEFAULT NULL,
`city_preferred` varchar(250) COLLATE utf8_unicode_ci DEFAULT NULL,
`continent_id` varchar(250) COLLATE utf8_unicode_ci DEFAULT NULL,
`review_score` varchar(250) COLLATE utf8_unicode_ci DEFAULT NULL,
`review_nr` varchar(250) COLLATE utf8_unicode_ci DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
--
-- Dökümü yapılmış tablolar için indeksler
--
--
-- Tablo için indeksler `mavitm_hotel_hotel`
--
ALTER TABLE `mavitm_hotel_hotel`
ADD PRIMARY KEY (`id`);
--
-- Dökümü yapılmış tablolar için AUTO_INCREMENT değeri
--
--
-- Tablo için AUTO_INCREMENT değeri `mavitm_hotel_hotel`
--
ALTER TABLE `mavitm_hotel_hotel`
MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT;
CREATE TABLE `mavitm_hotel_hotel_desc` (
`desc_id` int(11) NOT NULL,
`hotel_id` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment