![]() ![]() ![]()
Какой рейтинг вас больше интересует?
|
Главная /
Каталог блоговCтраница блогера Хабрахабр: PHP / Блог / Захабренные/Записи в блоге |
![]() |
Хабрахабр: PHP / Блог / Захабренные
Голосов: 1 Адрес блога: http://habrahabr.ru/blog/php/ Добавлен: 2008-06-12 19:52:35 блограйдером ZaiSL |
Применение SpeechKit Cloud API для озвучивания погоды и новостей от Yandex
2015-11-19 22:55:46 (читать в оригинале)Добрый день! В данной статье хотелось бы рассказать о том, как можно сделать на сайте «Голосовой погодный и новостной информер», который бы, например при выборе города не только показывал, но и рассказывал фактический прогноз погоды, а так же произвольную новость. На самом деле этот скрипт разрабатывался для информирования в системе «Умный Дом», но может быть с легкостью переделан под любой сайт, имеющий на хостинге поддержку PHP, что и было сделано для этой статьи. В примере для синтеза речи, будет использоваться технология SpeechKit Cloud API от компании Yandex и XML парсер Yandex погоды и новостей, написанные на PHP.
Что понадобится для реализации:
- Web сервер с поддержкой PHP (можно локальный типа Денвера).
- Ключ Yandex SpeechKit (для некоммерческих проектов можно получить бесплатно).
- Если ключ не дают без наличия у Вас сайта, то создать сайт можно на Hostinger.ru.
- Список ID городов.
Данный материал предоставляется исключительно в ознакомительных целях, поэтому процесс установки на сайт и добавления городов, здесь рассматриваться не будет.
Принцип работы:
- Отправляем запрос на получение mp3 файла, для выбранного города.
- Парсим XML файл, получая необходимые параметры.
- Корректируем окончания слов, для постановки правильного произношения.
- Устанавливаем параметры генерации mp3 файла (голос, тембр, формат файла, язык, текст).
- Генерируем mp3 файл.
- Создаем объект Audio HTML 5 и воспроизводим файл.
Скрипт с формой для выбора городов index.html
<!DOCTYPE html>
<html lang="ru">
<head>
<title>Тест SpeechKit Cloud API от компании Yandex.</title>
<meta charset="utf-8">
</head>
<body>
<script language="javascript" type="text/javascript">
function Get_Weather()
{
var tts_text=document.getElementById('weather').value;
console.log(tts_text);
var response="weather.php?&q="+encodeURI(tts_text); //путь до mp3 файла
var audio = document.getElementById("gameMusic");
if (audio)
{
audio.parentNode.removeChild(audio);
}
// создаём новый элемент audio
audio = document.createElement("audio");
audio.setAttribute("id", "gameMusic");
audio.setAttribute("autoplay", "true");
//audio.setAttribute("loop", "false");
var mp3 = document.createElement("source");
mp3.setAttribute("src", response);
mp3.setAttribute("type", "audio/mpeg");
audio.appendChild(mp3);
audio.play();
document.body.appendChild(audio);
}
function Get_News()
{
var tts_text=document.getElementById('news').value;
console.log(tts_text);
var response="news.php?&q="+encodeURI(tts_text); //путь до mp3 файла
var audio = document.getElementById("gameMusic");
if (audio)
{
audio.parentNode.removeChild(audio);
}
// создаём новый элемент audio
audio = document.createElement("audio");
audio.setAttribute("id", "gameMusic");
audio.setAttribute("autoplay", "true");
//audio.setAttribute("loop", "false");
var mp3 = document.createElement("source");
mp3.setAttribute("src", response);
mp3.setAttribute("type", "audio/mpeg");
audio.appendChild(mp3);
audio.play();
document.body.appendChild(audio);
}
</script>
<h1><span>Тест SpeechKit Cloud API от компании Yandex.</span></h1>
<h2>Погода</h2>
<select size="1" onclick="Get_Weather();" id="weather">
<option disabled>Выберите город</option>
<option value="27612">Москва</option>
<option value="34880">Астрахань</option>
<option value="26063">Санкт-Петербург</option>
<option value="25913">Магадан</option>
</select>
<h2>Новости</h2>
<select size="1" onclick="Get_News();" id="news">
<option disabled>Выберите город</option>
<option selected value="Astrakhan">Астрахань</option>
<option value="Volgograd">Волгоград</option>
<option value="Krasnodar">Краснодар</option>
<option value="Moscow">Москва</option>
<option value="Saratov">Саратов</option>
</select>
</body>
</html>
Горда можно добавлять путём установки новых параметров option в элементе select.
Скрипт генерации mp3 файла для погоды weather.php
<?php
$id=$_GET["q"]; // id города
$url="http://export.yandex.ru/weather-ng/forecasts/".$id.".xml"; // url xml файла
$xml = simplexml_load_file($url); // интерпретируем XML-файл в объект
//параметры:
$city=$xml['city']; //город
$temp=$xml->fact->temperature; // температура
$weather_type=$xml->fact->weather_type; // тип погоды
$humidity=$xml->fact->humidity; // влажность
$wind_direction=$xml->fact->wind_direction; // направление ветра
$wind_speed=$xml->fact->wind_speed; // скорость ветра
$pressure=$xml->fact->pressure; // давление
$znak="плюс";
if($wind_direction=="e") { $wind_direction_text="восточный";}
if($wind_direction=="w") { $wind_direction_text="западный";}
if($wind_direction=="s") { $wind_direction_text="южный";}
if($wind_direction=="n") { $wind_direction_text="северный";}
if($wind_direction=="se") { $wind_direction_text="юго-восточный";}
if($wind_direction=="ne") { $wind_direction_text="северо-восточный";}
if($wind_direction=="sw") { $wind_direction_text="юго-западный";}
if($wind_direction=="nw") { $wind_direction_text="северо-западный";}
$minus_arry=preg_match("/(-)/", $temp, $minus_out);
if (!empty($minus_out[1]))
{ $znak="минус";
$temp=str_replace("-","",$temp);
}
//градус
if( $temp=="1" or $temp=="21" or $temp=="31" or $temp=="41" or $temp=="51" or $temp=="61" or $temp=="71" or $temp=="81" or $temp=="91" or $temp=="101")
{
$text="градус";
}
else
{
//градуса
if( $temp=="2" or $temp=="3" or $temp=="4"
or $temp=="22" or $temp=="23" or $temp=="24"
or $temp=="32" or $temp=="33" or $temp=="34"
or $temp=="42" or $temp=="43" or $temp=="44"
or $temp=="52" or $temp=="53" or $temp=="54"
or $temp=="62" or $temp=="63" or $temp=="64"
or $temp=="72" or $temp=="73" or $temp=="74"
or $temp=="82" or $temp=="83" or $temp=="84"
or $temp=="92" or $temp=="93" or $temp=="94"
or $temp=="102" or $temp=="103"
) {$text="градуса";} else {$text="градусов";}
}
//процент
if( $humidity=="1" or $humidity=="21" or $humidity=="31" or $humidity=="41" or $humidity=="51" or $humidity=="61" or $humidity=="71" or $humidity=="81" or $humidity=="91" or $humidity=="101")
{
$humidity_text="процент";
}
else
{
//процента
if( $humidity=="2" or $humidity=="3" or $humidity=="4"
or $humidity=="22" or $humidity=="23" or $humidity=="24"
or $humidity=="32" or $humidity=="33" or $humidity=="34"
or $humidity=="42" or $humidity=="43" or $humidity=="44"
or $humidity=="52" or $humidity=="53" or $humidity=="54"
or $humidity=="62" or $humidity=="63" or $humidity=="64"
or $humidity=="72" or $humidity=="73" or $humidity=="74"
or $humidity=="82" or $humidity=="83" or $humidity=="84"
or $humidity=="92" or $humidity=="93" or $humidity=="94"
or $humidity=="102" or $humidity=="103"
) {$humidity_text="процента";} else {$humidity_text="процентов";}
}
//миллиметр
if( $pressure=="701" or $pressure=="721" or $pressure=="731" or $pressure=="741" or $pressure=="751" or $pressure=="761" or $pressure=="771" or $pressure=="781" or $pressure=="791" or $pressure=="801")
{
$pressure_text="милиметр ртутного столба";
}
else
{
//миллиметра
if( $pressure=="702" or $pressure=="703" or $pressure=="704"
or $pressure=="722" or $pressure=="723" or $pressure=="724"
or $pressure=="732" or $pressure=="733" or $pressure=="734"
or $pressure=="742" or $pressure=="743" or $pressure=="744"
or $pressure=="752" or $pressure=="753" or $pressure=="754"
or $pressure=="762" or $pressure=="763" or $pressure=="764"
or $pressure=="772" or $pressure=="773" or $pressure=="774"
or $pressure=="782" or $pressure=="783" or $pressure=="784"
or $pressure=="792" or $pressure=="793" or $pressure=="794"
or $pressure=="802" or $pressure=="803"
) {$pressure_text="милиметра ртутного столба";} else {$pressure_text="милиметров ртутного столба";}
}
$say_text="Сейчас в городе ".$city." ".$weather_type.". Tемпература воздуха ".$znak." ".$temp." ".$text.". Влажность ".$humidity." ".$humidity_text.". Ветер ".$wind_direction_text." ".$wind_speed." метров в секунду. Атмосферное давление ".$pressure." ".$pressure_text." !";
$qs = http_build_query(array("format" => "mp3","lang" => "ru-RU","speaker" => "jane","key" => "SpeechKit_Cloud_API_Key","emotion" => "good", "text" => $say_text)); // параметры запроса
$ctx = stream_context_create(array("http"=>array("method"=>"GET","header"=>"Referer: \r\n")));
$soundfile = file_get_contents("https://tts.voicetech.yandex.net/generate?".$qs, false, $ctx); // запрос на генерацию mp3 файла
echo($soundfile);
?>
В скрипте нужно изменить SpeechKit_Cloud_API_Key на полученный Вами ключ.
Скрипт генерации mp3 файла для новостей news.php
<?php
$city=$_GET['q'];
$data_file="http://news.yandex.ru/".$city."/index.rss"; // адрес xml файла
$xml = simplexml_load_file($data_file); // раскладываем xml на массив
$number= rand(1,13); //генерируем порядковый номер новости
$news=$xml->channel->item[$number]->description; //новость
$title=$xml->channel->item[$number]->title; //заголовок
$content_news = trim(preg_replace('/\s{2,}/', ' ', $news));//удаляем весь хлам
$content_title = trim(preg_replace('/\s{2,}/', ' ', $title));//удаляем весь хлам
$text=$content_title." - ".$content_news;
$search = array('"','"',' ',')','(');
$replace = array('');
$text = str_replace($search, $replace, $text);
$qs = http_build_query(array("format" => "mp3","lang" => "ru-RU","speaker" => "jane","key" => "SpeechKit_Cloud_API_Key","emotion" => "good", "text" => $text)); // параметры запроса
$ctx = stream_context_create(array("http"=>array("method"=>"GET","header"=>"Referer: \r\n")));
$soundfile = file_get_contents("https://tts.voicetech.yandex.net/generate?".$qs, false, $ctx); // запрос на генерацию mp3 файла
echo($soundfile);
?>
Читать дальше →
Тэги: api, php, yandex, веб-разработка, голосовой, информер, новости, погода, программирование, речи, синтез, яндекс
Постоянная ссылка
[Перевод] Риски и проблемы хеширования паролей
2015-11-19 17:14:39 (читать в оригинале)Безопасность всегда была неоднозначной темой, провоцирующей многочисленные горячие споры. И всё благодаря обилию самых разных точек зрения и «идеальных решений», которые устраивают одних и совершенно не подходят другим. Я считаю, что взлом системы безопасности приложения всего лишь вопрос времени. Из-за быстрого роста вычислительных мощностей и увеличения сложности безопасные сегодня приложения перестанут завтра быть таковыми.
Прим. перев.: для более полной картины здесь вас также будет ждать перевод Hashing Passwords with the PHP 5.5 Password Hashing API, на которую автор ссылается в статье.
Читать дальше →
Тэги: group, mail.ru, php, безопасность, блог, веб-разработка, информационная, компании, пароли, хеш-функции, хеширование
Постоянная ссылка
Особенности создания web-проекта «под ключ» от Startup Makers
2015-11-19 13:44:13 (читать в оригинале)В рамках проходящей сейчас конференции GeekWeek-2015 мы общаемся с нашими спикерами. Сегодня на связи Денис Измайлов, CEO Startup Makers, уже известный многим из вас по своим статьям DenisIzmaylov
Денис, ты уже более 15 лет занимаешься веб-разработкой. Скажи, в чем причина такой стабильной привязанности к одному направлению?
К сожалению, именно веб-разработкой я занимаюсь не 15, а 13 лет. :) В конце 1999 года я открыл для себя программирование и увлекся разработкой программного обеспечения для Windows, а позже — даже созданием собственной операционной системы. Тогда у меня не было доступа к Интернет. Это была далекая Сибирь. И вот весной 2003 года судьба свела меня с удивительным человеком. Он открыл для меня возможности Web, Apache, PHP. Сделав несколько экспериментальных проектов, я увидел, что мои способности к исследованиям, самообучению, созиданию и красивому могут быть интересны и полезны большому количеству людей. Это захватывает и вдохновляет, когда твой рост и результаты приятны и полезны обществу.
Читать дальше →
Тэги: agile, apache, api, dfd, geekbrains, geekweek, idef0, javascript, jira, journey, makers, php, pivotal, startup, tracker, trello, user, web, wireframes, блог, веб-разработка, интервью, история, кейс, компании, успеха
Постоянная ссылка
Использование AJAX-обработчика WordPress
2015-11-18 19:07:52 (читать в оригинале)
WordPress, будучи одной из самых популярных CMS в мире, снабжен подробной документацией, а точнее, даже двумя. В связи с чем ни в коем случае не стоит воспринимать этот текст как описание неких “best practices” и уж точно никто не заставляет слепо следовать описанному. Статья — просто быстрый ответ на вопрос «как?!» (следующий абзац) и подробное описание всего, что нужно знать чтобы заставить WordPress отвечать на AJAX-запросы (вся остальная статья).
Кратко
Традиционно для AJAX-запросов нужно две вещи: скрипт на сервере (бекенд), который будет отвечать на запросы, и скрипт на клиенте (фронтенд), который будет эти запросы делать. WordPress позволяет делегировать функции на обращение к специальному URL, по которому находится обработчик запросов.
Итак, работает это, «WordPress-way», вот так:
- На бекенде с помощью функции
admin_url
получаем ссылку на обработчик AJAX-запросов и передаем ее во фронтенд одним из способов. Именно к этой ссылке мы будем делать наши запросы. - На бекенде регистрируется хук с функцией для обработки некоего экшена. Назовем этот экшен, например, get_posts.
- Фронт-енд делает запросы к URL-у из пункта 1, передавая имя экшена. Например,
?action=get_posts
.
На бек-енде, если на экшен зарегистрирован хук, выполняется заданная нами функция.
Вот так вот просто. Теперь подробнее.
Читать дальше →
Мой опыт миграции на PHP 7
2015-11-18 18:00:16 (читать в оригинале)
Несколько дней назад я переключил свой сервер с порядка 30-ти сайтами на PHP 7. Некоторые из них были достаточно старыми и составляли широкий набор с различных фреймворков и CMS. Вот несколько советов для тех кто еще не решил переходить на PHP 7 или нет.
Начнем с того что я понимаю что есть много людей которые не считают стабильную версию действительно «стабильной» пока она чуть-чуть не повзрослела, ожидая что еще найдутся какие-то баги или несовместимости. С того что я пока видел, пробуя каждый release candidate как только он выходил, совсем безопасно переключиться на PHP 7 как только он выйдет. Я ни разу не заметил какого-то непонятного поведения или вылета которому виной не был бы я сам. Несмотря на то что это новая версия она не несет много несовместимых изменений, то есть по большому счету можете относиться к ней как к просто PHP 5.7 только существенно быстрее.
Читать дальше →



Категория «Спортсмены»
Взлеты Топ 5
![]() | ||
+327 |
339 |
dandr |
+326 |
344 |
Блог о недвижимости в Болгарии |
+326 |
357 |
Красота абиссинской кошки |
+290 |
338 |
Notebook with traces of spilled coffee |
+290 |
336 |
Эстетическая гимнастика в Воронеже |
Падения Топ 5
![]() | ||
-1 |
3 |
Gatekeeper |
-1 |
6 |
Футбол – это жизнь |
-4 |
12 |
Fitne.Ru |
-16 |
25 |
Лента новостей сайта bestfighters.ru |
-21 |
35 |
Список диет |

Популярные за сутки
Загрузка...

BlogRider.ru не имеет отношения к публикуемым в записях блогов материалам. Все записи
взяты из открытых общедоступных источников и являются собственностью их авторов.
взяты из открытых общедоступных источников и являются собственностью их авторов.