Мне нужно превратить HTML в эквивалентный текст со структурой Markdown.
OBS .: Быстрый и понятный способ сделать это с помощью PHP и Python .
Поскольку я программирую на PHP, некоторые люди указывают Markdownify чтобы сделать работу, но, к сожалению, код не обновляется и на самом деле он не работает .На sourceforge.net/projects/markdownify есть «ПРИМЕЧАНИЕ: не поддерживается - хотите поддержать этот проект? Свяжитесь со мной! Markdownify - это конвертер HTML в Markdown, написанный на PHP. Считайте его преемником html2text.php, так как он имеетлучший дизайн, лучшая производительность и меньше угловых дел. "
Из того, что я мог обнаружить, у меня есть только два хороших выбора:
Итак, из PHP мне нужно передать HTML-код, вызвать Ruby /Python Script и получите вывод обратно.
(Кстати, народ тут задал похожий вопрос («как вызвать скрипт ruby из php?»), Но без практической информации для моего случая).
Следуя подсказке Жестяного человечка (ниже), я получил следующее:
Код PHP:
$t='<p><b>Hello</b><i>world!</i></p>';
$scaped=preg_quote($t,"/");
$program='python html2md.py';
//exec($program.' '.$scaped,$n); print_r($n); exit; //Works!!!
$input=$t;
$descriptorspec=array(
array('pipe','r'),//stdin is a pipe that the child will read from
array('pipe','w'),//stdout is a pipe that the child will write to
array('file','./error-output.txt','a')//stderr is a file to write to
);
$process=proc_open($program,$descriptorspec,$pipes);
if(is_resource($process)){
fwrite($pipes[0],$input);
fclose($pipes[0]);
$r=stream_get_contents($pipes[1]);
fclose($pipes[1]);
$return_value=proc_close($process);
echo "command returned $return_value\n";
print_r($pipes);
print_r($r);
}
Код Python:
#! /usr/bin/env python
import html2text
import sys
print html2text.html2text(sys.argv[1])
#print "Hi!" #works!!!
С учетом вышесказанного я получаю следующее:
команда вернула 1 массив ([0] => ResourcИдентификатор # 17 1 => Идентификатор ресурса # 18)
И файл «error-output.txt» сообщает:
Traceback (последний вызов был последним):Файл "html2md.py", строка 5, печатается html2text.html2text (sys.argv 1 ) IndexError: список индексов выходит за пределы
Есть идеи ???
Ruby-код ( все еще анализируется )
#!/usr/bin/env ruby
require_relative 'html2markdown'
puts HTML2Markdown.new("<h1>#{ ARGF.read }</h1>").to_s
Только для записей я пытался использовать самый простой PHP "exec ()", но получилнекоторые проблемы с некоторыми специальными символами, очень распространенными в языке HTML.
код PHP:
echo exec('./hi.rb');
echo exec('./hi.py');
код Ruby:
#!/usr/bin/ruby
puts "Hello World!"
код Python:
#!usr/bin/python
import sys
print sys.argv[1]
Оба работают нормально.Но когда строка немного сложнее:
$h='<p><b>Hello</b><i>world!</i></p>';
echo exec("python hi.py $h");
Это не сработало вообще.
Это потому, что для строки html нужно было убрать специальные символы.Я получил это, используя это:
$t='<p><b>Hello</b><i>world!</i></p>';
$scaped=preg_quote($t,"/");
Теперь это работает так, как я сказал здесь .
Я работаю: Fedora 14 ruby 1.8.7 Python 2.7 perl 5.12.2 PHP 5.3.4 nginx 0.8.53