以下のように書いたら、全くgoogle map apiが表示されず、
{ 'address': <?php echo $address; ?>, 'region': 'jp' },
jsonにエンコードしたら表示されるようになりました。
{ 'address': <?php echo json_encode($address); ?>, 'region': 'jp' },
たったこれだけに1時間以上嵌ってしまいました。。
随机应变 ABCD: Always Be Coding and … : хороший
以下のように書いたら、全くgoogle map apiが表示されず、
{ 'address': <?php echo $address; ?>, 'region': 'jp' },
jsonにエンコードしたら表示されるようになりました。
{ 'address': <?php echo json_encode($address); ?>, 'region': 'jp' },
たったこれだけに1時間以上嵌ってしまいました。。
今回はMFI(mobile first index)で作っていきます。
0335670003.php
<meta name="viewport" content="width=device-width,initial-scale=1"> <style> fieldset{ border:1px #C0C0C0 solid; } </style> <fieldset> <legend>オーナー情報</legend> ・事業者名:<br> <?php echo $owner; ?><br><br> ・住所:<br> <?php echo $address; ?> </fieldset> <br><br> <fieldset> <legend>電話番号情報</legend> <table width="100%" cellpadding="5"> <tr> <td>市街局番</td><td><?php echo $num1; ?></td><td>市内局番</td><td><?php echo $num2; ?></td> </tr> <tr> <td>加入者番号</td><td><?php echo $num3; ?></td><td></td><td></td> </tr> </table> </fieldset>
google mapを追加
<style> #content{ width:800px; margin:10px auto; } fieldset{ border:1px #C0C0C0 solid; } </style> <div id="content"> <h1>電話番号 <?php echo " ".$num1."-".$num2."-".$num3;?></h1> <table width="100%"> <tr><td width="52%" valign="top"> <fieldset> <legend>オーナー情報</legend> ・事業者名:<br> <?php echo $owner; ?><br><br> ・住所:<br> <?php echo $address; ?><br><br> </fieldset> </td><td width="48%" align="right" valign="top"> <div id="map" style="width: 350px; height: 250px;"></div> </td> </tr></table> <br><br> <fieldset> <legend>電話番号情報</legend> <table width="100%" cellpadding="5"> <tr> <td>市街局番</td><td><?php echo $num1; ?></td><td>市内局番</td><td><?php echo $num2; ?></td> </tr> <tr> <td>加入者番号</td><td><?php echo $num3; ?></td><td></td><td></td> </tr> </table> </fieldset> </div> <script type="text/javascript" src="//maps.google.com/maps/api/js?sensor=false"></script> <script> function drawMap(address) { var geocoder = new google.maps.Geocoder(); geocoder.geocode( { 'address': '(〒104-0061)東京都中央区銀座1丁目9−18', 'region': 'jp' }, function (results, status) { if (status == google.maps.GeocoderStatus.OK) { google.maps.event.addDomListener(window, 'load', function () { var map_tag = document.getElementById('map'); var map_location = new google.maps.LatLng(results[0].geometry.location.lat(),results[0].geometry.location.lng()); var map_options = { zoom: 16, center: map_location, disableDefaultUI: true, mapTypeId: google.maps.MapTypeId.ROADMAP }; var map = new google.maps.Map(map_tag, map_options); var marker = new google.maps.Marker({ position: map_location, map: map }); }); } } ); } drawMap(); </script>
Nice
まず、00-99までは、for文を入れ子にして繰り返す。
for($i=0; $i<10; $i++){ for($j=0; $j<10; $j++){ echo $i.$j."<br>"; } }
000~999 入れ子を増やす
$time_start = microtime(true); for($i=0; $i<10; $i++){ for($j=0; $j<10; $j++){ for($k=0; $k<10; $k++){ echo $i.$j.$k."<br>"; } } } $time = microtime(true) - $time_start; echo "{$time} 秒";
0.0011639595031738 秒
0~9999 4重にする
$time_start = microtime(true); for($i=0; $i<10; $i++){ for($j=0; $j<10; $j++){ for($k=0; $k<10; $k++){ for($l=0; $l<10; $l++){ echo $i.$j.$k.$l."<br>"; } } } } $time = microtime(true) - $time_start; echo "{$time} 秒";
0.017668008804321 秒
なるほど
秒単位ならsleep
echo date("h:i:s")."<br>"; sleep(1); echo date("h:i:s");
03:25:13
03:25:14
それより細かくならusleep, 500000msで0.5秒
echo date("h:i:s")."<br>"; usleep(500000); echo date("h:i:s");
Speech Synthesisを応用。テキストではなく、音声で解説する。
<?php $text = "e-POWERは日産の電気自動車「リーフ」に搭載されている大出力モーターのみで走行します。 トヨタプリウスに代表されるような、これまでのハイブリッド車は、エンジンとモーターのそれぞれを動力として、シーンごとに役割を分担。より効率のいい方を選ぶ、もしくは併用して走行しています。それに対して日産のe-POWERは、モーターのパワーのみで走行し、エンジンは発電専用となっています。したがって、エンジンは動力としては利用されません。まず、ここがハイブリッド車とe-POWERの一番の違いと言えます。"; ?> <h1>日産ノート</h1> <img src="note.jpg" width="500px"><br> <input type="hidden" class="text" value="<?php echo $text; ?>"> <button onclick="speak()">解説を聞く</button> <script> function speak(){ var text = document.querySelector('.text').value; speechSynthesis.speak( new SpeechSynthesisUtterance(text) ); } </script>
おおお、何を言ってるのか全く理解できないが、仕組みはなんとなく悪くはない気がします。
<h1>demo1</h1> <input class="text" value="web speech apiを使ってみよう"> <button onclick="speak()">speak()</button> <script> function speak(){ var text = document.querySelector('.text').value; speechSynthesis.speak( new SpeechSynthesisUtterance(text) ); } </script>
下のボタンを押してみてください。
※type=”hidden”とすれば、inputは非表示にできます。
<?php $weather = "[ 東京都の天気概況 ] 本州付近は高気圧に覆われています。 【関東甲信地方】 関東甲信地方は、甲信地方は晴れている所もありますが、関東地方はおおむね曇りとなっています。 3日は、高気圧に覆われて晴れますが、湿った空気の影響により、朝晩中心に曇る所があるでしょう。"; ?> <h1>今日の天気</h1> <?php echo $weather; ?><br> <input type="hidden" class="text" value="<?php echo $weather; ?>"> <button onclick="speak()">音声再生</button> <script> function speak(){ var text = document.querySelector('.text').value; speechSynthesis.speak( new SpeechSynthesisUtterance(text) ); } </script>
ぎゃーーー 素晴らしいですね。
view
<?php include 'voicetext.php'; ?> <style> .form{ width:500px; } </style> <body> <span>テキストを入力してください</span><br> <form id="form" name="form" action="" method="POST"> <input id="input_text" type="text" class="form" name="input_text" value=""> <button type="submit">変換する</button> </form> <span>変換した音声を再生する</span><br> <audio id="audio" controls> <source src="voice.mp3"> </audio><br> <input type="button" value="play" onclick="audio_play()"> <input type="button" value="pause" onclick="audio_pause()"> <script type="text/javascript"> function audio_play() { audio.play();} function audio_pause() { audio.pause();} </script>
voicetext.php
hikariの声を使います。
https://cloud.voicetext.jp/webapi/docs/api
curl
$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "https://api.voicetext.jp/v1/tts"); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $authorized = "do not watch"; curl_setopt($ch,CURLOPT_HTTPAUTH, CURLAUTH_BASIC); curl_setopt($ch,CURLOPT_USERPWD,$authorized); $post_array = array("text" => $_POST["input_text"], "speaker" => "hikari", "emotion" => "happiness", "pitch" => "80", "emotion_level" => "4"); $postdata = ""; foreach ($post_array as $key => $val){ $postdata.= urlencode($key) . '=' . urlencode($val). '&'; } curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata); $output = curl_exec($ch); curl_close($ch); $fp = fopen("voice.mp3","w"); fwrite($fp, $output); fclose($fp);
browser
mp3
HOYA株式会社:光学機器・ガラスメーカー
東京都新宿区西新宿6-10-1 日土地西新宿ビル 20F
代表:鈴木洋
天気予報RSSをmp3に変換してみます。
テキスト:[ 東京都の天気概況 ] 本州付近は高気圧に覆われています。 【関東甲信地方】 関東甲信地方は、甲信地方は晴れている所もありますが、関東地方はおお むね曇りとなっています。 3日は、高気圧に覆われて晴れますが、湿った空気の影響により、朝晩中 心に曇る所があるでしょう。
笑)これは、ちょっと違う 〇やってる人みたいですね。
emotionとemotion levelをなくします。
ほう
cloud speech api
<div id="content"> <input type="textarea" id="q" name="q" size=60> <input type="button" value="Click to Speak" onclick="recognition.start()"> </div> <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.3/umd/popper.min.js"></script> <script> var recognition = new webkitSpeechRecognition(); recognition.onresult = function(event) { if (event.results.length > 0) { q.value = event.results[0][0].transcript; } } </script>
192.168.33.10:8000ではマイクがブロックされます。
chromeのhelpページを見ても、解決する記載がなし
https://support.google.com/chrome/answer/2693767?hl=ja
仕方ないので、さくらで共有sslの環境で試してみます。
sslを設定すると、許可のポップアップが表示される
おおお、すげー、感動した!
どうもhttp通信だと、セキュリティ的にマイクはダメのようですね。
また、mp3ファイル(TRF ez do dance)を再生して、歌詞を表示させようとしましたが、audio再生をそのままテキストにすることはできませんでした。残念。
tel:を使います。
<?php $fname = $_SERVER['PHP_SELF']; $number = substr($fname, 1, 12); ?> <a href="tel:<?php echo $number; ?>"><?php echo $number; ?></a>
iphoneで試してみましたが、上手くいきました。
電話番号の情報を表示
googleで「ぎんざ姿 電話番号」を打ち込むと、
一発で出てくる。。終わった。
echo $_SERVER['PHP_SELF'];
1文字目~13文字目をslice
$fname = $_SERVER['PHP_SELF']; echo substr($fname, 1, 12);
ファイルを複製する
$i = 1; $copy = '03-3567-000'.$i.'.php'; copy('03-3567-0003.php', $copy);
03-3567-0001.php の中身のコードも、03-3567-0003.phpと同じものになっています。
ファイルを複数複製する
for($i = 0; $i < 10; $i++){ $copy = '03-3567-000'.$i.'.php'; if(!file_exists($copy)){ copy('03-3567-0003.php', $copy); } }
これ、何百万のphpファイルと何百万のmysqlレコードをつくるのか!?