<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/css" href="http://wiki2.linuxformat.ru/skins/common/feed.css?97"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title>LXF108:Да услышьте же RSS! - История изменений</title>
		<link>http://wiki2.linuxformat.ru/index.php?title=LXF108:%D0%94%D0%B0_%D1%83%D1%81%D0%BB%D1%8B%D1%88%D1%8C%D1%82%D0%B5_%D0%B6%D0%B5_RSS%21&amp;action=history</link>
		<description>История изменений этой страницы в вики</description>
		<language>ru</language>
		<generator>MediaWiki 1.11.1</generator>
		<lastBuildDate>Wed, 13 May 2026 21:36:15 GMT</lastBuildDate>
		<item>
			<title>Crazy Rebel: викификация, оформление</title>
			<link>http://wiki2.linuxformat.ru/index.php?title=LXF108:%D0%94%D0%B0_%D1%83%D1%81%D0%BB%D1%8B%D1%88%D1%8C%D1%82%D0%B5_%D0%B6%D0%B5_RSS%21&amp;diff=8606&amp;oldid=prev</link>
			<description>&lt;p&gt;викификация, оформление&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая статья&lt;/b&gt;&lt;/p&gt;&lt;div&gt;: '''Hardcore Linux''' Проверь себя на крутом проекте для продвинутых пользователей&lt;br /&gt;
&lt;br /&gt;
==Говорящие новости==&lt;br /&gt;
&lt;br /&gt;
: Всемирная сеть может говорить с тобой! '''Грэм Моррисон''' озвучит новостную ленту RSS, используя простой скрипт ''Python'' и речевой синтезатор ''Festival''.&lt;br /&gt;
&lt;br /&gt;
На первый взгляд, написание скрипта/программы для скачивания и разбора RSS-ленты и последующая отправка новостей&lt;br /&gt;
в синтезатор речи – задача амбициозная, даже для наших продвинутых уроков. Но, как выясняется, на самом деле это довольно просто, в основном благодаря трем технологиям: ''Python, Festival'' и&lt;br /&gt;
Linux. ''Python'' – доминирующий в мире скриптовый язык – позволяет&lt;br /&gt;
легко создавать сценарии, особо не задумываясь и не прилагая чрезмерных усилий. Система синтеза речи ''Festival Speech Synthesis System'' с открытым исходным кодом – фантастическая штука, и ее можно&lt;br /&gt;
установить парой щелчков мыши из менеджера пакетов вашего дистрибутива. Да и сам Linux – без его мощных каналов и планирования&lt;br /&gt;
процессов у нас ушло бы куда больше времени на реализацию всего&lt;br /&gt;
этого функционала в нашей программе, и мы также должны были бы&lt;br /&gt;
сами добавить к ней графический интерфейс, чтобы сделать ее легко&lt;br /&gt;
доступной. К счастью, все, что надо сделать – это накропать небольшой скрипт на ''Python'' и немного поколдовать с командной строкой для увязывания всего этого вместе. Мы напишем сценарий ''Python'', выводящий сообщение в текстовом формате, а затем подадим текст на вход ''Festival'', который озвучит новость через динамики или наушники. Это&lt;br /&gt;
дает максимальную гибкость. Такой двуединый подход (''Python''-скрипт,&lt;br /&gt;
передающий вывод в ''Festival'') можно применять к практически любой&lt;br /&gt;
цели. Менее чем через час вы сможете сидеть сложа руки и слушать&lt;br /&gt;
нежный женский голос синтезатора, читающего последние события с&lt;br /&gt;
вашего любимого сайта.&lt;br /&gt;
&lt;br /&gt;
===Часть 1 Говорящие головы===&lt;br /&gt;
&lt;br /&gt;
{{Врезка|left|Заголовок=Что вам нужно: | Содержание=&lt;br /&gt;
&lt;br /&gt;
* ''Python 2.5.2''&lt;br /&gt;
* ''Feedparser for Python''&lt;br /&gt;
* ''Festival 1.96 beta aplay'' (from ''alsa-utils'')| Ширина=200px}}&lt;br /&gt;
&lt;br /&gt;
Для начала нужно заставить синтезатор речи работать. Может показаться, что мы начинаем с конца, но ведь без настроенного синтезатора речи мы не сможем построить и опробовать нашу программу. Пакеты ''Festival'' включены в большинство популярных дистрибутивов Linux, и это прекрасно, по сравнению с запутанными требованиями и номенклатурой, используемыми на web-сайте проекта. ''Festival'' может «говорить» на различных языках и диалектах, от хинди и маратхи до чешского и&lt;br /&gt;
итальянского; это означает, что нужный для установки пакет будет зависеть от вашей локали ['''русский также доступен, – прим.ред.''']. Для классического английского [UK-English], например, вам нужно установить два пакета: ‘Festival lexicon from the Oxford Advanced Learners’ Dictionary’ и ‘Part of speech lexicons and ngram from English’, а также&lt;br /&gt;
основной пакет ''Festival'' и пакет «диктора» (голос) по вашему выбору.&lt;br /&gt;
В зависимости от популярности вашего языка, вы можете найти мужские и женские голоса, с низкой (8000) и высокой (16000) частотой&lt;br /&gt;
дискретизации.&lt;br /&gt;
&lt;br /&gt;
{{Врезка| Заголовок=RSS против Atom |Содержание=Мы уже привыкли к тому, что небольшой оран-&lt;br /&gt;
жевый значок, помечающий сгруппированные&lt;br /&gt;
новости на сайте, обозначает ленту RSS. Однако&lt;br /&gt;
есть много конкурирующих версий и форматов,&lt;br /&gt;
которые прикрываются тем же символом. Два&lt;br /&gt;
самых распространенных, RSS 2.0 и Atom, имеют полную поддержку со стороны модуля&lt;br /&gt;
''Feedparser'', используемого в нашем сценарии.&lt;br /&gt;
Atom был разработан с целью устранить некоторые проблемы RSS. В RSS, к примеру, не было&lt;br /&gt;
способа указать, какой язык используется в&lt;br /&gt;
конкретной истории, а также является ли она&lt;br /&gt;
HTML или простым текстом. Но это несоответствие создает проблемы для разработчиков.&lt;br /&gt;
Два разных формата необходимо и рассматривать по-разному, потому что Atom содержит&lt;br /&gt;
элементы, которых нет в RSS, и даже форматирование общих элементов, типа даты и времени, заметно отличается. Нужно убедиться, что&lt;br /&gt;
разбираемая лента поддерживает элементы в&lt;br /&gt;
ожидаемом вами формате; единственный способ – загружать «сырые» данные ленты, либо&lt;br /&gt;
скачав файл, на который указывает URL ленты,&lt;br /&gt;
либо с помощью агрегатора новостей, извлекающего исходные данные и сохраняющего их на&lt;br /&gt;
диске. Содержание ленты можно просмотреть в&lt;br /&gt;
обычном текстовом редакторе.|Ширина=200px}}&lt;br /&gt;
&lt;br /&gt;
Тем, кто никогда раньше не пользовался ''Festival'', он покажется немного загадочным. Заставить программу заговорить, похоже, было&lt;br /&gt;
для разработчиков побочной целью. Наберите ''festival'' в командной строке, и вы увидите приглашение интерфейса интерпретатора. Вместо «здрасьте», напечатайте ('''SayText “Hello World!”'''), включая скобки.&lt;br /&gt;
Если все установлено и работает правильно, вы услышите утробный&lt;br /&gt;
голос синтезатора речи ''Festival'', изрекающий слова «'''hello'''» и «'''world'''».&lt;br /&gt;
Голос всецело зависит от установленных вами пакетов. Кто желает&lt;br /&gt;
ужаснуться количеству предлагаемых ''Festival'' вариантов,&lt;br /&gt;
просто наберите '''help''' для их просмотра. Нам же нужно,&lt;br /&gt;
чтобы ''Festival'' вещал из командной строки, и для этого&lt;br /&gt;
есть два разных метода. Первый использует аргумент&lt;br /&gt;
'''--tts'''. Эта команда будет читать либо файл (дословно!), либо стандартный вывод с терминала. То есть мы&lt;br /&gt;
можем канализовать выход любой команды в ''Festival''.&lt;br /&gt;
Например, набрав ''echo “Hello world” | festival --tts'', вы&lt;br /&gt;
получите результат, аналогичный предыдущему: здесь&lt;br /&gt;
мы перенаправляем вывод команды ''echo'' в ''Festival'' без&lt;br /&gt;
запуска интерпретатора, а он затем передает звук в ваши&lt;br /&gt;
динамики. Но у этой тактики есть проблемы. Если звуковая карта уже используется, то вы получите ошибку:&lt;br /&gt;
“'''Linux: can’t open /dev/dsp'''”, потому что ''Festival'' не взаимодействует со звуковой подсистемой Linux – он просто&lt;br /&gt;
посылает необработанные аудиоданные на '''/dev/dsp''', а&lt;br /&gt;
устройство занято, и это не работает. Большинство окружений рабочего стола любят захватывать '''/dev/dsp''', так&lt;br /&gt;
что при получении нового сообщения вместо новости вы&lt;br /&gt;
услышите разве что звук «пинг».&lt;br /&gt;
&lt;br /&gt;
Решение немного запутанно. Во-первых, запустим&lt;br /&gt;
''Festival'' как сервер, набрав ''festival --server''. Это заставит&lt;br /&gt;
приложение работать в фоновом режиме, молча ожидая от клиента ''Festival'' просьбы перевести текст в речь.&lt;br /&gt;
Такая схема более эффективна, чем запуск ''Festival'' при&lt;br /&gt;
каждой необходимости что-то озвучить, и это также&lt;br /&gt;
открывает возможности для дистанционных монологов. Для подключения к серверу и генерации речи используем команду ''festival_client'' в другом терминале, а также аргумент '''--ttw'''. Вместо того, чтобы отправлять звук прямо на аудиоустройство (и сбоить, если устройство уже занято), опция '''ttw '''будет передавать необработанные аудиоданные&lt;br /&gt;
на консоль. Нам надо перенаправить их в команду, способную прочитать этот вывод и отправить его в аудиоподсистему. Простейший&lt;br /&gt;
вариант – команда ''aplay''; скорее всего, она установлена по умолчанию. ''Aplay'' общается с ALSA напрямую, а значит, вы можете поделить свое аудиоустройство между приложениями. Полная версия команды,&lt;br /&gt;
использующая клиент и сервер и посылающая вывод на ''aplay'' – ''echo “Hello World” | festival_client --ttw | aplay''. Набрав ее в командной строке, вы должны услышать голос речевого синтезатора ''Festival''. Теперь мы&lt;br /&gt;
готовы всерьез взяться за программирование.&lt;br /&gt;
&lt;br /&gt;
===Часть 2 Декодируем RSS===&lt;br /&gt;
&lt;br /&gt;
{{Врезка|Заголовок=Скорая помощь| Содержание=Не забывайте, что&lt;br /&gt;
''Python'' использует отступы для логического разделения участков кода, например, функций и условий '''if'''. Если вы получаете сообщения об ошибках, проверьте, все ли отступы используют одинаковое количество пробелов или знаков табуляции.| Ширина=150px}}&lt;br /&gt;
&lt;br /&gt;
Решив вопрос с генерацией звука, можно заняться программированием; начнем с загрузки и разборки RSS-ленты. Оно сперва звучит пугающе, но осуществляется очень легко, благодаря штуке под названием&lt;br /&gt;
‘''Feedparser'' ‘ – модулю ''Python'', который умеет загружать и разбирать&lt;br /&gt;
все наиболее распространенные форматы лент RSS и Atom. Так как это&lt;br /&gt;
модуль, его необходимо установить отдельно, но в силу его универсального великолепия он, скорее всего, поставляется вместе с ''Python'' в менеджере пакетов вашего дистрибутива. Если вы не пользовались&lt;br /&gt;
''Python'' раньше, он приятно поразит вас на фоне мира зависимостей,&lt;br /&gt;
библиотек, заголовков и наследований, которыми страдают другие,&lt;br /&gt;
более «корпоративные» языки программирования. Так, например,&lt;br /&gt;
для импорта ''Feedparser'' в свою программу нужно просто начать ее с&lt;br /&gt;
'''import feedparser'''. Только эта строка и нужна для поддержки RSS-лент&lt;br /&gt;
в нашей Python-программе. Чтобы доказать это, мы добавим несколько строк, извлекающих заголовки первой ленты с нашего собственного&lt;br /&gt;
сайта. Откройте ваш любимый текстовый редактор и добавьте следующий текст в файле ниже команды '''import''':&lt;br /&gt;
&lt;br /&gt;
  import feedparser&lt;br /&gt;
  rss_url = “http://www.linuxformat.co.uk/backend.php”&lt;br /&gt;
  feed = feedparser.parse( rss_url )&lt;br /&gt;
  print feed.entries[0].title&lt;br /&gt;
&lt;br /&gt;
Сохраните текст в файле с расширением '''py''' и запустите его из&lt;br /&gt;
командной строки, набрав ''python имяфайла.py''. Вы должны увидеть заголовок последней новости с сайта Linux Format UK, напечатанный в консоли. За это надо благодарить ''Feedparser'': он скачивает ленту с&lt;br /&gt;
http://linuxformat.co.uk и возвращает данные как Unicode-строку ''Python'', которую мы связываем с переменной '''feed'''. Отсюда и происходят все другие данные RSS/Atom. В приведенном примере мы вывели заголовок первой новости. Каждая новость является элементом в массиве записей entries, и мы свободно можем запросить практически любое сообщение ленты. Заменив '''title''' на '''description''', мы получили бы тело новости, а не один заголовок. Есть много элементов, подобных этим, и мы можем&lt;br /&gt;
использовать их в зависимости от версии и формата канала.&lt;br /&gt;
&lt;br /&gt;
Попробуйте добавить '''print feed''' для печати всего содержимого&lt;br /&gt;
выбранного RSS-источника и поищите в выводе элементы, которые&lt;br /&gt;
могут пригодиться. Общие элементы включают '''feed.title''' для заголовка&lt;br /&gt;
ленты, '''feed.link''', возвращающий URL сайта, и '''feed.date''', содежащий&lt;br /&gt;
дату ленты. Но мы еще раз предупреждаем, что все каналы отличаются&lt;br /&gt;
друг от друга в своем представлении. Лента Linux Format UK, например,&lt;br /&gt;
не включает поля даты. Чтобы сделать процесс более гладким, скрипты&lt;br /&gt;
''Python'' можно запускать автоматически; поместите это в первой строке&lt;br /&gt;
исходного кода:&lt;br /&gt;
&lt;br /&gt;
  #!/usr/bin/python&lt;br /&gt;
      Сделайте файл исполняемым с помощью&lt;br /&gt;
  chmod +x filename.py&lt;br /&gt;
&lt;br /&gt;
в терминале. Ваш скрипт теперь можно запустить, набрав ''./filename.py'',&lt;br /&gt;
и интегрировать его в вашу установку ''Festival'', напечатав:&lt;br /&gt;
&lt;br /&gt;
  ./filename.py | festival_client --ttw | aplay&lt;br /&gt;
&lt;br /&gt;
Вы должны услышать заголовок нашей главной новости, читаемый&lt;br /&gt;
вам синтезатором речи ''Festival'', и это наиболее сложная часть всего процесса. Теперь можно адаптировать наш простой сценарий для выбора статей, которые вы хотите услышать, организовать поддержку&lt;br /&gt;
нескольких лент и ввести любые другие улучшения. Но прежде всего&lt;br /&gt;
нужно создать каркас для скрипта. Начнем снова с пустого файла и&lt;br /&gt;
создадим более гибкое решение.&lt;br /&gt;
&lt;br /&gt;
===Часть 3 Программирование на ''Python''===&lt;br /&gt;
&lt;br /&gt;
Вершиной хит-парада дружелюбия программы является умение разбирать параметры командной строки. Если мы добавим его в нашу программу, то сможем использовать различные аргументы для загрузки&lt;br /&gt;
альтернативных лент, указания числа выводимых новостей для чтения,&lt;br /&gt;
а также других режимов работы. С внедрением этих опций мы сможем&lt;br /&gt;
автоматизировать нашу программу через ''cron'' или через другие сценарии, используя внутренние аргументы для изменения режима работы скрипта – точно так же, как мы делаем с другими утилитами. Анализ&lt;br /&gt;
аргументов ''Python'' (так это называется) очень похож на используемый&lt;br /&gt;
в языках ''C'' и ''C++'' и использует модуль ''getopt''. Его необходимо добавить&lt;br /&gt;
к инструкции '''import''' в верхней части нашего скрипта, вместе с другим&lt;br /&gt;
модулем по имени ''sys'' и ранее добавленным ''Feedparse. Sys'' обеспечивает базовую функциональность, зависящую от системы, и является обязательным для всех скриптов, кроме самых простейших. Теперь&lt;br /&gt;
мы должны разделить наш сценарий на функции, чтобы мы могли&lt;br /&gt;
вызывать каждую из них по отдельности в зависимости от аргументов&lt;br /&gt;
командной строки. Как и в ''C/C++'', мы начнем с функции '''main''', где живет&lt;br /&gt;
основная составляющая программной логики.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
 def main():&lt;br /&gt;
     try:&lt;br /&gt;
       opts, args = getopt.getopt(sys.argv[1:], “hu:c:t”, [“help”, “url=”, “count=”, “title”])&lt;br /&gt;
    except getopt.GetoptError, err:&lt;br /&gt;
       print str(err)&lt;br /&gt;
       usage()&lt;br /&gt;
       sys.exit(2)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В первой строке функция main заявляет о своем существовании,&lt;br /&gt;
'''def main():''', затем разбирает аргументы командной строки внутри&lt;br /&gt;
пары операторов '''try''' и '''except'''. Они представляют собой простейшую&lt;br /&gt;
форму обработки исключений. Выражение с '''try''' анализирует переданные параметры, выискивая однобуквенные ключи '''h, u:, c:''' или '''t''' и их длинные аналоги '''help, url=, count=''' и '''title'''. Мы будем использовать эти&lt;br /&gt;
аргументы, чтобы добавить функциональность в скрипт. Ключ '''-h''' или&lt;br /&gt;
'''--help''', например, заставит его выводить информацию об использовании, '''url=“http://feedurl”''' сообщит скрипту адрес ленты для скачивания, а '''-с 3''' или '''--count=3''' велят ему принять во внимание только три последних новости. Наконец, аргументы '''-t''' and '''--title''' выступают в качестве&lt;br /&gt;
переключателя. Если они присутствуют, скрипт будет выводить только заголовок каждой новости, а не заголовок вместе с текстом. Если&lt;br /&gt;
какие-либо аргументы не распознаны, запускается сегмент исключения, выводя стандартную ошибку перед выполнением функции '''usage()''' и выходом. Теперь, определив и разобрав аргументы командной строки, используемые для запуска скрипта, мы должны сделать с ним что-нибудь полезное. Используя цикл '''for''', переберем аргументы командной строки и назначим их значения переменным, которые мы сможем использовать в части скрипта, отвечающей за работу с RSS. Ниже обработчика исключений добавьте следующий кусок кода:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
 url = “http://www.linuxformat.co.uk/backend.php”&lt;br /&gt;
  title = False&lt;br /&gt;
  count = 1&lt;br /&gt;
  for o, a in opts:&lt;br /&gt;
      if o in (“-h”, “--help”):&lt;br /&gt;
          noargument()&lt;br /&gt;
          sys.exit()&lt;br /&gt;
      elif o in (“-u”, “--url”):&lt;br /&gt;
          url = a&lt;br /&gt;
      elif o in (“-c”, “--count”):&lt;br /&gt;
          count = int(a)&lt;br /&gt;
      elif o in (“-t”, “--title”):&lt;br /&gt;
          title = True&lt;br /&gt;
      else:&lt;br /&gt;
          assert False, “invalid option”&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Мы создаем значения по умолчанию для трех переменных, которые&lt;br /&gt;
будем использовать: '''url''' для месторасположения ленты, '''title''' для выбора, следует ли включать описание каждой новости или просто вывести название, и '''count''' для указания количества читаемых новостей.&lt;br /&gt;
&lt;br /&gt;
В условиях '''if''' мы проверяем каждую опцию и аргумент командной&lt;br /&gt;
строки ('''o''' и '''a''' в коде). Если определены '''-h''' или '''--help''', будет вызвана&lt;br /&gt;
функция '''noargument''', и скрипт завершит работу. Если определены '''-u'''&lt;br /&gt;
или '''--url=''', адрес ленты (аргумент) будет присвоен переменной '''url'''.&lt;br /&gt;
При обнаружении '''-c''' или '''--count=''', функция '''count = int(a)''' преобразует&lt;br /&gt;
строковый аргумент в целое число и запишет его в переменную '''count'''.&lt;br /&gt;
Наконец, если будут найдены '''-t''' или '''--title''', то флаг '''title''' будет установлен в '''True''' (истина).&lt;br /&gt;
&lt;br /&gt;
Понять смысл этих настроек очень легко с помощью кода ''Feedparser'',&lt;br /&gt;
использованного в нашем первоначальном скрипте. Мы просто используем еще один цикл for для извлечения каждой новости в зависимости&lt;br /&gt;
от значения переменной '''count''' (которая по умолчанию равна 1), и решаем, брать ли только описание новости или заодно и ее содержание. Вот код для этого – он должен идти следом за предыдущим куском:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
  feed = feedparser.parse( url )&lt;br /&gt;
  feed[‘feed’][‘title’]&lt;br /&gt;
  for i in range(0, count):&lt;br /&gt;
      if title:&lt;br /&gt;
          print feed[‘entries’][i][‘title’]&lt;br /&gt;
      else:&lt;br /&gt;
          print feed[‘entries’][i][‘title’]&lt;br /&gt;
          print feed[‘entries’][i][‘description’]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь мы просто обрабатываем каждую новость в соответствии со&lt;br /&gt;
значением '''count''' и передаем текст на стандартный вывод. Это будет&lt;br /&gt;
терминал, и уже оттуда можно перенаправить текст в синтезатор речи&lt;br /&gt;
''Festival''. Вот и все, что надо включить в функцию '''main'''. Осталось только чуть-чуть причесать код. Под нашим фрагментом кода добавьте следующее дополнение, необходимое для любого скрипта ''Python'' с&lt;br /&gt;
функцией '''main()''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
  if __name__ == “__main__”:&lt;br /&gt;
      sys.exit(main())&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Взглянув на вызываемые нами функции, вы заметите, что используются две еще неописанные: ''usage()'', ответ на запуск обработчика&lt;br /&gt;
исключений при отсутствии правильных аргументов, и '''noargument''',&lt;br /&gt;
вызываемая, когда пользователь запрашивает '''--help'''. Обе они должны&lt;br /&gt;
слегка подтолкнуть пользователя в нужном направлении, предлагая&lt;br /&gt;
ему, во-первых, ввести скрипт с опцией '''--help''', а во-вторых, описывая&lt;br /&gt;
каждый из ключей, принимаемых скриптом. Для выполнения обе-&lt;br /&gt;
их функций добавьте нечто похожее на следующий код в верхнюю&lt;br /&gt;
часть вашего скрипта, между оператором '''import''' и началом функции&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
def main():.&lt;br /&gt;
 def usage():&lt;br /&gt;
   print “Try ‘rss2voice --help’ for more information.”&lt;br /&gt;
 def noargument():&lt;br /&gt;
   print “Download text from an RSS feed and send it to the standard output.”&lt;br /&gt;
   print “-h, --help prints this information”&lt;br /&gt;
   print “-u, --url=the URL for the RSS feed”&lt;br /&gt;
   print “-c --count= number of stories you need”&lt;br /&gt;
   print “-t,       --title output only the title of each story”&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Вот и весь код. Вы сейчас написали полностью функциональный сценарий разбора ленты RSS/Atom, пригодный для отправки текста в&lt;br /&gt;
синтезатор речи ''Festival''. Как обычно, при ограниченном пространстве&lt;br /&gt;
для публикации, мы опустили проверку на ошибки – хуже всего то, что&lt;br /&gt;
мы не проверяем правильность URL’а, передаваемого в скрипт. Если&lt;br /&gt;
ленты не существует, это приведет к проблемам, и может вызвать&lt;br /&gt;
ошибки в скрипте. В остальном все готово к работе. Просто замените новым скриптом старый в первоначальной команде, которую мы&lt;br /&gt;
использовали для озвучивания речи в ''Festival'', и вы услышите мелодичные голоса, рассказывающие вам последние новости из Башен&lt;br /&gt;
Linux Format. '''LXF'''&lt;br /&gt;
&lt;br /&gt;
===Куда двигаться дальше...===&lt;br /&gt;
&lt;br /&gt;
* Создать запись ''cron'' для автоматического запуска скрипта.&lt;br /&gt;
* Добавить режим ожидания для просмотра новых историй каждый час.&lt;br /&gt;
* Отмечать прочитанные и непрочитанные статьи, чтобы избежать дублирования.&lt;br /&gt;
* Настроить различные синтезаторы речи или голоса.&lt;br /&gt;
* Интегрировать речь ''Festival'' непосредственно в скрипт.&lt;/div&gt;</description>
			<pubDate>Thu, 27 Aug 2009 08:47:50 GMT</pubDate>			<dc:creator>Crazy Rebel</dc:creator>			<comments>http://wiki2.linuxformat.ru/index.php/%D0%9E%D0%B1%D1%81%D1%83%D0%B6%D0%B4%D0%B5%D0%BD%D0%B8%D0%B5:LXF108:%D0%94%D0%B0_%D1%83%D1%81%D0%BB%D1%8B%D1%88%D1%8C%D1%82%D0%B5_%D0%B6%D0%B5_RSS%21</comments>		</item>
	</channel>
</rss>