Re: json mysql конвертер букм арков мозиллы

2009-04-21 Пенетрантность Nicholas

Спасибо, все получилось.
Перлокошмарик получился такой:

#!/bin/sh

sqlite3 places.sqlite .dump  |\
grep -v  BEGIN TRANSACTION;|\
grep -v  COMMIT;   |\
perl -pe 's/INSERT INTO \(.*)\ VALUES/INSERT INTO \1 VALUES/'|\
perl -pe 's/LONGVARCHAR/LONGTEXT/'   |\
perl -pe 's/LONGVARCHAR/LONGTEXT/'   |\
perl -pe 's/LONGVARCHAR/LONGTEXT/'   |\
perl -pe 's/AUTOINCREMENT/auto_increment/'   |\
perl -pe 's/TEXT UNIQUE/text/'   |\
perl -pe 's///' |\
perl -pe 's///' |\
grep -v INTO sqlite_sequence   |\
grep -v FROM sqlite_sequence   |\
grep -v moz_inputhistory   |\
grep -v CREATE UNIQUE  |\
grep -v CREATE INDEX   |\
grep -v CREATE TRIGGER |\
mysql -u root -p xbase

Далее полученную таблицу можно отобразить, собрав все папки для каждой 
закладки, с помощью php (пример ниже).
Все это нужно было, что бы представить и папки и теги как равнозначные 
атрибуты, с возможностью их выбора через иконки, для поиска нужной 
букмарки. (интерфейса в примере нет).




htmlbody
?php
$dbhost = localhost;
$dbuser = base;
$dbpass = base;
$dbname = base;
$dbtable=new_table;

$link=mysql_connect($dbhost,$dbuser,$dbpass) or 
die(mysql_errno($link).mysql_error($link));
$db=mysql_select_db($dbname,$link) or 
die(mysql_errno($link).mysql_error($link));



convert_one();

//--
//--
function convert_one() {
global $attr_parent;

$add_bookmarks = mysql_query(SELECT * FROM `moz_places` WHERE `hidden` 
= '0');

while($bookmarks_data=mysql_fetch_row($add_bookmarks)) {
list($id,$url,$title,$rev_host,$visit_count,$hidden,$typed,$favicon_id,$frecency) 
= $bookmarks_data;
echo 
--, 
br;

echo ' $url: ', $url, br;
//$add=mysql_query(INSERT INTO `my_table` (экспортируйте данные, при 
желании, в ваш формат) ) or die(mysql_errno($link).mysql_error($link));


$snoop_attr = mysql_query(SELECT * FROM `moz_bookmarks` WHERE `fk` = 
'$id');

while($attr_data=mysql_fetch_row($snoop_attr)) {
list($attr_id, $attr_type, $attr_fk, $attr_parent, $attr_position, 
$attr_title, $attr_keyword_id, $attr_folder_type, $attr_dateAdded, $attr_l

echo ' $attr_title: ', $attr_title, br;
//$add=mysql_query(INSERT INTO `my_table` (экспортируйте данные, при 
желании в ваш формат) ) or die(mysql_errno($link).mysql_error($link));

cycle();
}
}
}
//--
//--
function cycle() {
global $attr_parent;
if ($attr_parent!=0){
snoop_parent();
}
}


//--
//--
function snoop_parent() {
global $attr_parent;
$snoop_attr_parent = mysql_query(SELECT * FROM `moz_bookmarks` WHERE 
`id` = '$attr_parent');

while($snoop_attr_parent_data=mysql_fetch_row($snoop_attr_parent)) {

list($attr_id_parent, $attr_type_parent, $attr_fk_parent, $attr_parent, 
$attr_position_parent, $attr_title_parent, $attr_keyword_id_parent, $


if ($attr_title_parent!=){
if ($attr_title_parent!=Bookmarks Menu){
echo ' $attr_title_parent: ', $attr_title_parent, br;
//$add=mysql_query(INSERT INTO `my_table` (экспортируйте данные, при 
желании, в ваш формат) ) or die(mysql_errno($link).mysql_error($link));

}
}


}
cycle();
}


?
/body/html

Удачи.

--
Sincerely,
Nicholas


--
To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org



Re: json mysql конвертер букм арков мозиллы

2009-04-16 Пенетрантность Nicholas

Alexey Pechnikov wrote:

Насколько я вижу, проблема в двойных кавычках вокруг имени таблицы: 
moz_bookmarks. Замените moz_bookmarks на moz_bookmarks. Апострофы не 
трогайте - удалив их, вы получаете некорректный SQL, значения вида 0,0, не 
пропустит ни одна из известных мне СУБД.


Спасибо, процесс пошел, 5800 записей перевел.
Но вылетела ошибка:

$ sqlite3 places.sqlite .dump | \grep -v BEGIN TRANSACTION; | \grep -v 
COMMIT; | \perl -pe 's/INSERT INTO \(.*)\ VALUES/INSERT INTO \1 
VALUES/' |\perl -pe 's/LONGVARCHAR/LONGTEXT/'  |\perl -pe 
's/AUTOINCREMENT/auto_increment/'  | perl -pe 's/TEXT UNIQUE/text/'| 
perl -pe 's///'   | perl -pe 's///'  | \mysql -u root -p mybase

Enter password:
ERROR 1146 (42S02) at line 5815: Table 'xbase.sqlite_sequence' doesn't exist

sqlite_sequence в дампе json встречается всего дважды (5815,5816 строки):
DELETE FROM sqlite_sequence;
INSERT INTO sqlite_sequence VALUES('moz_keywords',4);

(странно что CREATE нет)
попробовал их вообще убрать:


$ sqlite3 places.sqlite .dump |  perl -pe s/INSERT INTO sqlite_sequence 
VALUES('moz_keywords',4);// | perl -pe 's/DELETE FROM 
sqlite_sequence;//'  |\grep -v BEGIN TRANSACTION; | \grep -v COMMIT; 
| \perl -pe 's/INSERT INTO \(.*)\ VALUES/INSERT INTO \1 VALUES/' 
|\perl -pe 's/LONGVARCHAR/LONGTEXT/'  |\perl -pe 
's/AUTOINCREMENT/auto_increment/'  | perl -pe 's/TEXT UNIQUE/text/'| 
perl -pe 's///'   | perl -pe 's///'  | \mysql -u root -p mybase


Enter password:
ERROR 1146 (42S02) at line 5816: Table 'xbase.sqlite_sequence' doesn't exist

Несовсем понятно, как может быть ошибка в строке 5816, если эта строка 
целиком убрана:

perl -pe s/INSERT INTO sqlite_sequence VALUES('moz_keywords',4);//

Возможно, ошибка в синтаксисе ?



--
Sincerely,
Nicholas


--
To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org



Re: json mysql конвертер букм арков мозиллы

2009-04-14 Пенетрантность Nicholas

Alexey Pechnikov wrote:
Ерунда. Из одной базы перекинуть в другую задача элементарная. 


Что-то не получается сконвертировать из json в mysql:

 $ sqlite3 places.sqlite .dump | \grep -v BEGIN TRANSACTION; | \grep 
-v COMMIT; | \perl -pe 's/INSERT INTO \(.*)\ VALUES/INSERT INTO \1 
VALUES/' |\perl -pe 's/LONGVARCHAR/LONGTEXT/' | \mysql -u root -p mybase

Enter password:
ERROR 1064 (42000) at line 2: You have an error in your SQL syntax; 
check the manual that corresponds to your MySQL server version for the 
right syntax to use near 'moz_bookmarks 
VALUES(1,2,NULL,0,0,'',NULL,'',1219372686816687,1219372696583633' at line 1


Сначала подумал что проблема в ' , дал вот такую смешную команду (не 
знал как сразу все четыре ' убрать):


 $ sqlite3 places.sqlite .dump | \grep -v BEGIN TRANSACTION; | \grep 
-v COMMIT; | \perl -pe 's/INSERT INTO \(.*)\ VALUES/INSERT INTO \1 
VALUES/' |\perl -pe 's/LONGVARCHAR/LONGTEXT/'  | perl -pe s/'//| perl 
-pe s/'//  | perl -pe s/'//| perl -pe s/'//   | \mysql -u root -p 
mybase

Enter password:
ERROR 1064 (42000) at line 2: You have an error in your SQL syntax; 
check the manual that corresponds to your MySQL server version for the 
right syntax to use near 'moz_bookmarks 
VALUES(1,2,NULL,0,0,,NULL,,1219372686816687,1219372696583633)' at line 1


Но, как видно, и это не помогло.



--
Sincerely,
Nicholas


--
To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org



Re: json mysql конвертер букм арков мозиллы

2009-04-07 Пенетрантность Nicholas

Alexey Pechnikov wrote:

Ищется способ, как можно перевести букмарки iceweasel из формата json
(или html) в базу данных mysql с изменением структуры.


Сто раз говорил, что SQLite всегда поможет :-)

sqlite3 places.sqlite 'select * from moz_bookmarks;'
sqlite3 places.sqlite '.schema moz_bookmarks'



Спасибо, это сильно упрощает задачу.
Осталось придумать сборщик директорий, вроде решаемо.


Artem Chuprina wrote:

Эээ...  Я правильно понял, что сэр желает таблицу с переменным числом 

колонок?

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


--
Sincerely,
Nicholas


--
To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org



Re: json mysql конвертер букм арков мозиллы

2009-04-07 Пенетрантность Artem Chuprina
Alexey Pechnikov - debian-russian@lists.debian.org  @ Tue, 7 Apr 2009 21:34:41 
+0400:

    Ты структуру базы, которую он хотел, проскипал не посмотрев?
 
   AP См. письмо топикстартера то что есть и сейчас в файле бекапа
   AP закладок. Т.е.  нужно вынуть всю инфу. Нет, думать над структурой
   AP таблички не надо, описание просто берется из БД мозиллы.
 
  А ты все-таки посмотри.  На многоточие в его письме

 AP Легко. В одном поле БД сохраняется структура, к примеру, в тип данных 
array 
 AP или тиклевый список, содержащий имена директорий.

 AP Надеюсь, топикстартер не собирается _хранить_ список директорий в
 AP отдельных полях БД - это лишено какого-либо смысла.

Ой, зря надеешься...

-- 
Дело говоришь!
Теперь делай его.
Кнышев.


-- 
To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org



Re: json mysql конвертер букм арков мозиллы

2009-04-06 Пенетрантность Artem Chuprina
Nicholas - debian-russian@lists.debian.org  @ Mon, 06 Apr 2009 14:36:53 -0400:

 N Ищется способ, как можно перевести букмарки iceweasel из формата json (или
 N html) в базу данных mysql с изменением структуры.

 N То есть надо, по каждому url сделать строку в mysql, где будут ячейки:
 N url, name, директория в которой находился url в букмарках Мозиллы,
 N поддиректория 1, поддиректория 2, ..., иконка, врямя создания 
закладки
 N (и тд, то что есть и сейчас в файле бекапа закладок).

Эээ...  Я правильно понял, что сэр желает таблицу с переменным числом колонок?

 N Как, примерно, должна выглядеть команда, делающая такую конвертацию ?

Может, все-таки начать со структуры базы, укладывающейся в парадигму
SQL?  И только потом уже спрашивать про команду?

P.S. Написание такой команды, будучи делом простым и неинтересным, но
муторным, вероятно, будет стоить какой-то компенсации.

-- 
Win-юзеры - это типа Win-модемов и Win-принтеров: такие же юзеры, но попроще,
без мозгов и памяти на борту.
http://www.livejournal.com/~dottedmag/158509.html


-- 
To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org