|
| Дата |
|
USD/RUB | 88.4375 | BTC/USD | 68098.4442 |
|
|
|
Скрипты, программы и технические решения Обсуждаем скрипты, программы и новые технологии. |
31.08.2017, 12:05
|
Start Post: WordPress: как удалить дубли постов в XML?
|
★☆★☆★
Регистрация: 01.10.2009
Сообщений: 443
Бабло: $166305
|
Как можно удалить дубли постов в XML файле перед импортом в вордпресс? Может быть, есть какие-то спец. скрипты или софт?
Извращался в Notepad++ путём объёдинения строк -> удаления дублей -> через поиск/замену восстановление правильного формата XML, но это просто пздц когда всё зависает на обработке крупных файлов =\
Ещё как вариант делаю предварительно импорт XML в вордпресс на локалхосте, после чего вордпресс сам отсеивает дубли постов. Затем закачиваю чистый XML через export тулзу. Тоже геморой, т.к. процесс проходит очень долго.
Как-то можно ускорить импорт XML на локалхосте? Разбивать файлы на несколько мелких не вариант, при условии что файлов очень много.
Заранее спасибо, если что можно за $ накидать решение.
__________________
I shave my balls
|
|
|
31.08.2017, 16:59
|
#12
|
сыроед
Регистрация: 01.10.2015
Сообщений: 15,818
Бабло: $1864045
|
попробуй так
5 сек на 300мб файле (8млн строк) это быстро?
через БД было бы побыстрее конечно
PHP код:
<?php
// все комменты должны находиться в блоках <item> ... </item> // шапку потом руками вставить в конечный файл
$infile = __DIR__."/xml-src.xml"; // исходный файл с комментами в текущей дире $outfile = __DIR__."/xml-out.xml"; // уникальные комменты пойдут сюда
$f1 = fopen($infile,'r'); $f2 = fopen($outfile,'w'); $hashes = array(); $trigger = 0; $str = '';
while ($line = fgets($f1)) { $l = trim($line); if (!$trigger && $l === "<item>") {$trigger = 1;}
if ($trigger) { $str .= $line;
if ($l === "</item>") { $trigger = 0; $md5 = md5($str); if (!isset($hashes{$md5})) { fwrite($f2,$str."\n"); $hashes{$md5} = ''; } $str = ''; continue; }
}
}
// footer fwrite($f2,"</channel>\n</rss>\n");
fclose($f1);fclose($f2);
?>
|
|
|
31.08.2017, 17:00
|
#13
|
Ебланнед
Регистрация: 13.02.2016
Сообщений: 1,390
Бабло: $194295
|
|
|
|
31.08.2017, 17:01
|
#14
|
Senior Member
Регистрация: 25.11.2013
Сообщений: 271
Бабло: $47245
|
Цитата:
Сообщение от Dr.EVIL
capturis, что-то не работает, на выходе файл без изменений.
|
Работает на этом примере, только у него в третьем </item> пробел лишний. Я предположил, что у тебя криво скопипастилось и его убрал.
|
|
|
02.09.2017, 12:42
|
#15
|
★☆★☆★
Регистрация: 01.10.2009
Сообщений: 443
Бабло: $166305
ТС -->
|
ТС
capturis, попробовал убрать пробелы, всё равно на выходе файл без изменений. Проверь плз, может быть, где-то ошибся?
веломан, также попробовал прогнать тестовый xml, на выходе файл без изменений.
Вот точный xml с дублем для проверки
PHP код:
<item>
<title>title1</title>
<dc:creator><![CDATA[admin]]></dc:creator>
<category><![CDATA[Uncategorized]]></category><category domain="category" nicename="uncategorized"><![CDATA[Uncategorized]]></category>
<category domain="tag"><![CDATA[Tag1]]></category><category domain="tag" nicename="tag1"><![CDATA[Tag1]]></category>
<content:encoded><![CDATA[
<p>text</p>
]]></content:encoded>
<wp:comment_status>open</wp:comment_status>
<wp:ping_status>close</wp:ping_status>
<wp:post_name>title1</wp:post_name>
<wp:status>publish</wp:status>
<wp:post_type>post</wp:post_type>
</item>
<item>
<title>title2</title>
<dc:creator><![CDATA[admin]]></dc:creator>
<category><![CDATA[Uncategorized]]></category><category domain="category" nicename="uncategorized"><![CDATA[Uncategorized]]></category>
<category domain="tag"><![CDATA[Tag1]]></category><category domain="tag" nicename="tag1"><![CDATA[Tag1]]></category>
<content:encoded><![CDATA[
<p>text</p>
]]></content:encoded>
<wp:comment_status>open</wp:comment_status>
<wp:ping_status>close</wp:ping_status>
<wp:post_name>title1</wp:post_name>
<wp:status>publish</wp:status>
<wp:post_type>post</wp:post_type>
</item>
<item>
<title>title1</title>
<dc:creator><![CDATA[admin]]></dc:creator>
<category><![CDATA[Uncategorized]]></category><category domain="category" nicename="uncategorized"><![CDATA[Uncategorized]]></category>
<category domain="tag"><![CDATA[Tag1]]></category><category domain="tag" nicename="tag1"><![CDATA[Tag1]]></category>
<content:encoded><![CDATA[
<p>text</p>
]]></content:encoded>
<wp:comment_status>open</wp:comment_status>
<wp:ping_status>close</wp:ping_status>
<wp:post_name>title1</wp:post_name>
<wp:status>publish</wp:status>
<wp:post_type>post</wp:post_type>
</item>
Добавлю, что в результате должно получиться только два блока, т.к. первый и последний являются одинаковыми. Т.е. в результате должно быть:
PHP код:
<item>
<title>title1</title>
<dc:creator><![CDATA[admin]]></dc:creator>
<category><![CDATA[Uncategorized]]></category><category domain="category" nicename="uncategorized"><![CDATA[Uncategorized]]></category>
<category domain="tag"><![CDATA[Tag1]]></category><category domain="tag" nicename="tag1"><![CDATA[Tag1]]></category>
<content:encoded><![CDATA[
<p>text</p>
]]></content:encoded>
<wp:comment_status>open</wp:comment_status>
<wp:ping_status>close</wp:ping_status>
<wp:post_name>title1</wp:post_name>
<wp:status>publish</wp:status>
<wp:post_type>post</wp:post_type>
</item>
<item>
<title>title2</title>
<dc:creator><![CDATA[admin]]></dc:creator>
<category><![CDATA[Uncategorized]]></category><category domain="category" nicename="uncategorized"><![CDATA[Uncategorized]]></category>
<category domain="tag"><![CDATA[Tag1]]></category><category domain="tag" nicename="tag1"><![CDATA[Tag1]]></category>
<content:encoded><![CDATA[
<p>text</p>
]]></content:encoded>
<wp:comment_status>open</wp:comment_status>
<wp:ping_status>close</wp:ping_status>
<wp:post_name>title1</wp:post_name>
<wp:status>publish</wp:status>
<wp:post_type>post</wp:post_type>
</item>
__________________
I shave my balls
Последний раз редактировалось Dr.EVIL; 02.09.2017 в 12:50.
|
|
|
02.09.2017, 12:54
|
#16
|
Senior Member
Регистрация: 25.11.2013
Сообщений: 271
Бабло: $47245
|
Цитата:
Сообщение от Dr.EVIL
capturis, попробовал убрать пробелы, всё равно на выходе файл без изменений. Проверь плз, может быть, где-то ошибся?
|
Ясен пень, ошибся. Только не я.
Код:
alex@komp ~/.tmp $ cat file.txt
<item>
<title>title1</title>
<dc:creator><![CDATA[admin]]></dc:creator>
<category><![CDATA[Uncategorized]]></category><category domain="category" nicename="uncategorized"><![CDATA[Uncategorized]]></category>
<category domain="tag"><![CDATA[Tag1]]></category><category domain="tag" nicename="tag1"><![CDATA[Tag1]]></category>
<content:encoded><![CDATA[
<p>text</p>
]]></content:encoded>
<wp:comment_status>open</wp:comment_status>
<wp:ping_status>close</wp:ping_status>
<wp:post_name>title1</wp:post_name>
<wp:status>publish</wp:status>
<wp:post_type>post</wp:post_type>
</item>
<item>
<title>title2</title>
<dc:creator><![CDATA[admin]]></dc:creator>
<category><![CDATA[Uncategorized]]></category><category domain="category" nicename="uncategorized"><![CDATA[Uncategorized]]></category>
<category domain="tag"><![CDATA[Tag1]]></category><category domain="tag" nicename="tag1"><![CDATA[Tag1]]></category>
<content:encoded><![CDATA[
<p>text</p>
]]></content:encoded>
<wp:comment_status>open</wp:comment_status>
<wp:ping_status>close</wp:ping_status>
<wp:post_name>title1</wp:post_name>
<wp:status>publish</wp:status>
<wp:post_type>post</wp:post_type>
</item>
<item>
<title>title1</title>
<dc:creator><![CDATA[admin]]></dc:creator>
<category><![CDATA[Uncategorized]]></category><category domain="category" nicename="uncategorized"><![CDATA[Uncategorized]]></category>
<category domain="tag"><![CDATA[Tag1]]></category><category domain="tag" nicename="tag1"><![CDATA[Tag1]]></category>
<content:encoded><![CDATA[
<p>text</p>
]]></content:encoded>
<wp:comment_status>open</wp:comment_status>
<wp:ping_status>close</wp:ping_status>
<wp:post_name>title1</wp:post_name>
<wp:status>publish</wp:status>
<wp:post_type>post</wp:post_type>
</item>
alex@komp ~/.tmp $ sed '/./{H;$!d;};x;s/\n/={NL}=/g' file.txt | sort -u | sed '1s/={NL}=//;s/={NL}=/\n/g'
<item>
<title>title1</title>
<dc:creator><![CDATA[admin]]></dc:creator>
<category><![CDATA[Uncategorized]]></category><category domain="category" nicename="uncategorized"><![CDATA[Uncategorized]]></category>
<category domain="tag"><![CDATA[Tag1]]></category><category domain="tag" nicename="tag1"><![CDATA[Tag1]]></category>
<content:encoded><![CDATA[
<p>text</p>
]]></content:encoded>
<wp:comment_status>open</wp:comment_status>
<wp:ping_status>close</wp:ping_status>
<wp:post_name>title1</wp:post_name>
<wp:status>publish</wp:status>
<wp:post_type>post</wp:post_type>
</item>
<item>
<title>title2</title>
<dc:creator><![CDATA[admin]]></dc:creator>
<category><![CDATA[Uncategorized]]></category><category domain="category" nicename="uncategorized"><![CDATA[Uncategorized]]></category>
<category domain="tag"><![CDATA[Tag1]]></category><category domain="tag" nicename="tag1"><![CDATA[Tag1]]></category>
<content:encoded><![CDATA[
<p>text</p>
]]></content:encoded>
<wp:comment_status>open</wp:comment_status>
<wp:ping_status>close</wp:ping_status>
<wp:post_name>title1</wp:post_name>
<wp:status>publish</wp:status>
<wp:post_type>post</wp:post_type>
</item>
|
|
|
02.09.2017, 13:12
|
#17
|
★☆★☆★
Регистрация: 01.10.2009
Сообщений: 443
Бабло: $166305
ТС -->
|
ТС
Вот так у меня, WTF
PHP код:
admin@1111 ~/.tmp $ cat file.txt
<item>
<title>title1</title>
<dc:creator><![CDATA[admin]]></dc:creator>
<category><![CDATA[Uncategorized]]></category><category domain="category" nicename="uncategorized"><![CDATA[Uncategorized]]></category>
<category domain="tag"><![CDATA[Tag1]]></category><category domain="tag" nicename="tag1"><![CDATA[Tag1]]></category>
<content:encoded><![CDATA[
<p>text</p>
]]></content:encoded>
<wp:comment_status>open</wp:comment_status>
<wp:ping_status>close</wp:ping_status>
<wp:post_name>title1</wp:post_name>
<wp:status>publish</wp:status>
<wp:post_type>post</wp:post_type>
</item>
<item>
<title>title2</title>
<dc:creator><![CDATA[admin]]></dc:creator>
<category><![CDATA[Uncategorized]]></category><category domain="category" nicename="uncategorized"><![CDATA[Uncategorized]]></category>
<category domain="tag"><![CDATA[Tag1]]></category><category domain="tag" nicename="tag1"><![CDATA[Tag1]]></category>
<content:encoded><![CDATA[
<p>text</p>
]]></content:encoded>
<wp:comment_status>open</wp:comment_status>
<wp:ping_status>close</wp:ping_status>
<wp:post_name>title1</wp:post_name>
<wp:status>publish</wp:status>
<wp:post_type>post</wp:post_type>
</item>
<item>
<title>title1</title>
<dc:creator><![CDATA[admin]]></dc:creator>
<category><![CDATA[Uncategorized]]></category><category domain="category" nicename="uncategorized"><![CDATA[Uncategorized]]></category>
<category domain="tag"><![CDATA[Tag1]]></category><category domain="tag" nicename="tag1"><![CDATA[Tag1]]></category>
<content:encoded><![CDATA[
<p>text</p>
]]></content:encoded>
<wp:comment_status>open</wp:comment_status>
<wp:ping_status>close</wp:ping_status>
<wp:post_name>title1</wp:post_name>
<wp:status>publish</wp:status>
<wp:post_type>post</wp:post_type>
</item>
admin@1111 ~/.tmp $ sed '/./{H;$!d;};x;s/\n/={NL}=/g' file.txt | sort -u | sed '1s/={NL}=//;s/={NL}=/\n/g'
<item>
<title>title1</title>
<dc:creator><![CDATA[admin]]></dc:creator>
<category><![CDATA[Uncategorized]]></category><category domain="category" nicename="uncategorized"><![CDATA[Uncategorized]]></category>
<category domain="tag"><![CDATA[Tag1]]></category><category domain="tag" nicename="tag1"><![CDATA[Tag1]]></category>
<content:encoded><![CDATA[
<p>text</p>
]]></content:encoded>
<wp:comment_status>open</wp:comment_status>
<wp:ping_status>close</wp:ping_status>
<wp:post_name>title1</wp:post_name>
<wp:status>publish</wp:status>
<wp:post_type>post</wp:post_type>
</item>
<item>
<title>title2</title>
<dc:creator><![CDATA[admin]]></dc:creator>
<category><![CDATA[Uncategorized]]></category><category domain="category" nicename="uncategorized"><![CDATA[Uncategorized]]></category>
<category domain="tag"><![CDATA[Tag1]]></category><category domain="tag" nicename="tag1"><![CDATA[Tag1]]></category>
<content:encoded><![CDATA[
<p>text</p>
]]></content:encoded>
<wp:comment_status>open</wp:comment_status>
<wp:ping_status>close</wp:ping_status>
<wp:post_name>title1</wp:post_name>
<wp:status>publish</wp:status>
<wp:post_type>post</wp:post_type>
</item>
<item>
<title>title1</title>
<dc:creator><![CDATA[admin]]></dc:creator>
<category><![CDATA[Uncategorized]]></category><category domain="category" nicename="uncategorized"><![CDATA[Uncategorized]]></category>
<category domain="tag"><![CDATA[Tag1]]></category><category domain="tag" nicename="tag1"><![CDATA[Tag1]]></category>
<content:encoded><![CDATA[
<p>text</p>
]]></content:encoded>
<wp:comment_status>open</wp:comment_status>
<wp:ping_status>close</wp:ping_status>
<wp:post_name>title1</wp:post_name>
<wp:status>publish</wp:status>
<wp:post_type>post</wp:post_type>
</item>
__________________
I shave my balls
|
|
|
02.09.2017, 14:05
|
#18
|
сыроед
Регистрация: 01.10.2015
Сообщений: 15,818
Бабло: $1864045
|
Цитата:
Сообщение от Dr.EVIL
веломан, также попробовал прогнать тестовый xml, на выходе файл без изменений.
Вот точный xml с дублем для проверки
Добавлю, что в результате должно получиться только два блока, т.к. первый и последний являются одинаковыми.
|
именно так он и работает - из 300мб оставил 5 уникальных блоков
он генерит новый файл xml-out.xml в той же дире, как указано в $outfile
кладёшь script.php в диру с xml-файлом
прописываешь в $infile = __DIR__."/имя_файла";
и запускаешь скрипт
зы: кстати, если на 100% есть уверенность, что все <item> </item> записи будут в начале строки БЕЗ пробелов, можно переделать без trim(), тогда скрипт будет в 2.2 раза быстрее
зыы: кстати, ты же его не на винде запускаешь??
Последний раз редактировалось веломан; 02.09.2017 в 14:10.
|
|
|
29.09.2017, 10:50
|
#19
|
Юниор
Регистрация: 25.09.2017
Адрес: Москва
Сообщений: 5
Бабло: $1920
|
DELETE t1 FROM `wp_posts` AS t1,`wp_posts` AS t2
WHERE t1.`post_content`=t2.`post_content` AND t1.ID>t2.ID
Данная транзакция удаляет копии постов опубликованные после уже имеющихся. Удалить что-то ненужное не получится, т.к. записи сравниваются именно по содержанию (поле post_content).
|
|
|
|