laravelのchunkとchunkByIdどっちが速い論争?

2024.06.08

Logging

おはようございます.laravelのchunkとchunkByIdどっちが速い論争があります.自分の肌感覚ではどっちもどっちだったのですが、chunkByIdの方が速くて良いという記事が多いです.因みに自分は何万件もあるテーブルを呼び出してデータをダウンロードさせるのにchunkを使用しました.

こうしないとメモリ不足でプロセスが落ちてしまうので、何万件も処理を行う場合はchunkを使用は必須みたいですね.使用してみたら確かに良いなって思いましたが、chunkとchunkByIdどちらも同じ時間でダウンロードが完了したので、万単位ではあまり差が広がらない感じでしたね.

Laravelのchunkを使用するのに参考にしたサイトはこちらになります.参考にしただけでそのまま使用はしていません.因みに例ソースコードを書こうと思いましたが自分の解説より下記のサイトが役に立つので今回は割愛します😌.

以上技術共有でした.

明日へ続く.

著者名  @taoka_toshiaki

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

タグ

chunk, chunkById, chunkByIdどちらも同じ時間, chunkByIdどっち, Laravel, ダウンロード, テーブル, プロセス, メモリ不足, 例ソースコード, 処理, 参考, , , 必須, 技術共有, 肌感覚, 解説, 論争,

Photo by Irina Iriser on Pexels.com

Excelでは読み込むことができないような大容量のデータもPowerQueryでは処理できます😤。 #PowerQueryExcel #30万件

2022.12.02

Logging

おはようございます、昨日からいきなり寒くなりましたね。🍃

30万件のダミーデータの作り方を記載します、まずは1万件のダミーデータをこちらのサイトで生成します。後はフォルダを構えてその中にダウンロードしてきたファイルを置き、そのファイルを30回複製します、その後PowerQueryで操作する(フォルダを開く)ことにより、簡単に30万件のダミーデータが作れます、なお、一つのエクセルファイルをPowerQueryで開き1万行をコピーアンドペーストする事を繰り返すことでも同じくダミーデータは作れます。

PowerQueryはこちらから無料でダウンロードできますので、ご使用ください。操作手順等はYOUTUBEでPowerQueryと検索するといろいろな解説がありますのでそちらを参照くださいませ。例えばこちらの動画など🙄

【データベースを一瞬で作れるPowerQueryが神】Excelパワークエリの使い方・メリット

著者名  @taoka_toshiaki

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

タグ

, 30, Excel, PowerQuery, PowerQueryExcel, youtube, アンド, いろいろ, エクセル, こちら, こと, コピー, サイト, そちら, ダウンロード, ダミー, データ, ファイル, フォルダ, ペースト, 一つ, , , , 作り方, 使用, 処理, 動画, 参照, 容量, , 手順, 操作, 昨日, 検索, 無料, 簡単, 複製, 解説, 記載,

ポッドキャストの良さに気づく。 #Podcast #時間短

2022.10.24

Logging

おはようございます🌅。本日、ワクチン接種してきます💉💉💉💉。

さて、今になってポッドキャストの良さに気づいてしまいました。動画よりも効率的に情報収集ができます。ながら聞きが出来るので良い。ラジオと違ってダウンロードして聞くことが出来ます。また、ラジオと違うところは自分の聴きたい人、聴きたいジャンルを聞くことが出来ます。

尚、結構ポッドキャストでは無料で色々なジャンルの方が発信してたりしています。お試しじゃなくて全部、無料で話が聞けたりして凄くお得感があります。

ポッドキャストにはグーグルポッドキャストやApplePodcastなど色々なポッドキャストが存在しますが、前文で記載したポッドキャストを覚えておけば事足りると思います。また、ポッドキャストのようなWEBサービスでボイシーという物もあります。こちらのサービスは有名人もいるので良いじゃないかな。

自分もいつまで聞くかは分かりませんが、今は聴いていて飽きないですね。

著者名  @taoka_toshiaki

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

タグ

ApplePodcast, Podcast, web, いつ, お得感, お試し, キャスト, グーグル, こちら, こと, サービス, シー, ジャンル, ダウンロード, ところ, ボイ, ボット, ポッドキャスト, ラジオ, ワクチン, , , 全部, 前文, 動画, 収集, 存在, 情報, 接種, , 時間, 有名人, 本日, 無料, , 発信, , 自分, 色々, 記載, ,

Photo by NEOSiAM 2021 on Pexels.com

Sqliteで作った簡易掲示板のコードを配布致します。#php #code

2022.09.20

Logging

おはようございます。台風は過ぎ去りましたがせっかくの三連休が残念です💦。

今日は先日、Sqliteを使用して簡易掲示板を作ってみましたのでコードを配布致します、尚、PHP8の環境下で動作させています(PHP7系でも動作すると思います)。

Sqliteってnow()関数がなかったりだとか、Deleteする時に、noカラムを昇順しlimitを使用して削除出来ないだとか、いろいろとMysqlとは違う所があり、面倒だなと思いながらコードを書きました、尚、SqliteはWebサーバーの階層に置かないように、置いても良いですが・・・。そのままの状態だと誰でもダウンロードが可能になってしまいますのでご注意ください。自分は地下に眠らしています😅。

一応、二重投稿防止の為に20秒経過しないと再投稿出来ないようにしています😌。トライしていない事は禁止ワード等がありません🤔。つけようと思ったのですがまぁ良いかなと、、、。

動作している環境のリンクはこちら。

https://reborn9.sakura.ne.jp/

軸となるPHPのソースコードを2つ貼っときますね。

<?php
session_start();
$toke_byte = openssl_random_pseudo_bytes(16);
$csrf_token = bin2hex($toke_byte);
$_SESSION['csrf_token'] = $csrf_token;
?>
<!DOCTYPE html>
<html lang="ja">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <meta name="Description" content="Enter your description here" />
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/5.1.0/css/bootstrap.min.css">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css">
    <link rel="stylesheet" href="assets/css/style.css?<?= time() ?>">
    <title>掲示板</title>
</head>

<body class="p-3 text-white">
    <div class="p-4 shadow rounded" style="background-color:#d6dbdf;">
        <div class="container mt-5">
            <div class="row">
            <div class="col-12 text-center">
                <h1 class="shadow" style="color:#195a57;">掲示板::version 2.5</h1>
            </div>
                <div class="col-12">
                    <div class="input-group shadow rounded">
                        <div class="input-group-append">
                            <span class="input-group-text bg-dark text-white" id="my-addon">ニックネーム</span>
                        </div>
                        <input class="form-control" type="text" name="name" placeholder="ニックネームを入力" aria-describedby="my-addon">
                    </div>
                    <div class="form-group shadow rounded">
                        <label for="my-textarea">コメント</label>
                        <textarea id="my-textarea" class="form-control" name="comment" rows="7"></textarea>
                    </div>
                    <button id="btn" class="mt-2 btn btn-info text-white shadow rounded" type="button">投稿する</button>
                </div>
            </div>
        </div>
        <div class="container mt-5">
            <div class="row">
                <div id="view" class="col-12"></div>
            </div>
        </div>
    </div>
    <footer>
        <a href="/">TOP</a> :: © Reborn9.sakura.ne.jp <?=date("Y")?>
    </footer>
    <input type="hidden" name="csrf_token" value="<?= $csrf_token ?>">
    <script src="https://code.jquery.com/jquery-3.2.1.min.js" crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/2.9.2/umd/popper.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/5.1.0/js/bootstrap.min.js"></script>
    <script src="assets/js/main.js?<?= time() ?>"></script>
</body>

</html>
<?php
class db
{
    var $pdo = null;
    function __construct()
    {
        try {
            $this->pdo = new PDO("sqlite:../../bbs.sqlite3");
            $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);        //code...
        } catch (\Throwable $th) {
            //throw $th;
            print $th->getMessage();
        }
    }
    function select_limit()
    {
        if($this->pdo){
            $stmt = $this->pdo->prepare('select * from bbs order by no desc limit 0,5');
            $stmt->execute();
            $result = $stmt->fetchAll();
            $stmt = null;
            $this->pdo = null;
            return new view($result);
        }
    }
    function insert($name,$comment,$sns_cnt=0)
    {

        try {
            $stmt = $this->pdo->prepare('INSERT INTO bbs (`time`,`name`,`comment`,sns_cnt)values(strftime(\'%Y年%m月%d日 %H時%M分%S秒\',CURRENT_TIMESTAMP, \'localtime\'),:name,:comment,:sns_cnt)');
            $stmt->bindParam(':name', $name, PDO::PARAM_STR);
            $stmt->bindParam(':comment', $comment, PDO::PARAM_STR);
            $stmt->bindParam(':sns_cnt', $sns_cnt, PDO::PARAM_INT);
            $stmt->execute();
            $stmt = $this->pdo->prepare('DELETE FROM bbs WHERE bbs.no = (SELECT no from bbs ORDER BY no ASC LIMIT 1);');
            $stmt->execute();
            $stmt = null;
            $this->pdo = null;
            return true;
        } catch (\Throwable $th) {
            print $th->getMessage();
            return false;
        }
    }
}

class view{
    var $item = null;
    function __construct($item)
    {
        $this->item = $item;        
    }
    function view_item($item="")
    {
        try {
            $item = $item?$item:$this->item;
            ob_start();
            ?>
            
            <?php
            foreach($item as $key=>$value){
                ?>
                <div class="mt-2 row txtbox shadow rounded">
                <div class="col-3 name_<?=$value["no"]?> rounded-start fs-6">
                    ニックネーム::<?=$value["name"]?>さん
                </div>
                <div class="col-9 time_<?=$value["no"]?> fs-6">
                    投稿日時::<?=$value["time"]?>
                </div>
                <div class="col-12 comment_<?=$value["no"]?>">
                    <?= nl2br($value["comment"])?>
                </div>
                <div class="col-12 sns_cnt_<?=$value["no"]?>">
                    <!-- <?=$value["sns_cnt"]?> -->
                </div>
                </div>
                <?php
            }        
            ?>
                
            <?php
            $ret["view"]= ob_get_clean();
            $ret["msg"]= "done";
    
        } catch (\Throwable $th) {
            //throw $th;
            $ret["msg"] = "error";
        }
        return $ret;
    }
}

session_start();
$ret = null;
$mode =  xss_defence($_POST["mode"]);
// $time =  ;
$name =  xss_defence($_POST["name"]);
$comment =  xss_defence($_POST["comment"]);
$sns_cnt =  (int)xss_defence($_POST["sns_cnt"]);
if (isset($_POST["csrf_token"]) 
 && $_POST["csrf_token"] === $_SESSION['csrf_token'] && (function($t){
    return time() - $t > 20?true:false;
 })($_SESSION["save"])) {
    if($mode==="save"){
        $name = !preg_replace("/[ | ]/","",$name)?"匿名":$name;
        $comment = !preg_replace("/[ | ]/","",$comment)?"":$comment;
        if($comment){
            $db = new db();
            $db->insert($name,$comment);
            $_SESSION["save"] = time();
        }
    }
    $db = null;
    $db = new db();
    $ret = $db->select_limit()->view_item();
    print  json_encode($ret);
}
function xss_defence($value){
    if(is_array($value)){
        foreach($value as $key=>$val){
            $value["$key"] = strip_tags($val);
            $value["$key"] = htmlspecialchars($value["$key"],ENT_QUOTES);
        }

    }else{
        $value = strip_tags($value);
        $value = htmlspecialchars($value);
    }
    return $value;
}

配布コードはこちらです。

著者名  @taoka_toshiaki

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

タグ

20, 7, 8, Code, Delete, LIMIT, MYSQL, no, Now, php, Sqlite, web, いろいろ, カラム, コード, ご注意, サーバー, せっかく, そのまま, ダウンロード, トライ, ワード, 三連, , , 今日, , 使用, 先日, 削除, 動作, 可能, 台風, 地下, , 投稿, 掲示, 昇順, , 残念, , 状態, 環境, 禁止, 簡易, 経過, 自分, , , 配布, 関数, 防止, 階層, 面倒,

1万件のCSVを読み込みテーブルに保存する雛形コード #PHPCode

2022.09.08

Logging

おはようございます、徐々に秋ぽっい日差しになってきましたね(まだ暑いけども😌)。

今日は、1万件のCSVを読み込みテーブルに保存する雛形コードを昨日、ちょちょっと書きましたので記載します。ファイルをダウンロードして使いたい方はGithubのリンクを下に貼っときますので、ご使用頂けたらと思います。尚、テーブルなどはCSVを参考にご自身で構えてください。

※動作環境はPHP8系です、なのでPHP7系では一部エラーが出ます。fgetcsv…nullを0へ変更。

Githubのリンクはこちら

Qiitaの方に記載しようかどうしようか、迷ったのですが第一弾目がアクセス数がそこそこ伸びたのでこれ以上、注目されるのは嫌なのでブログの方に記載しました。1万件のCSVを簡単に読み込ませる方法はPHPコードを書くのではなく、SQLのコマンドで実行した方が実は早いですけど・・・。

https://twitter.com/taoka_toshiaki/status/1567489169919975424
有言実行

早いですけど、その場合、CSVがちゃんとしたファイルではないと上手くテーブルに保存されない場合や、そもそもコマンドラインで操作出来ない場合もあったりしてPHPコードなどで制御しないと駄目な事もあります。そんな時に、このコードをサンプルとして使って頂ければ良いなと思い作りました。

1万件のCSVを読み込ませるPHPコード雛形。

そんなにコードを書かなくてもまぁ動くんですよ。ちなみにソースコードには、あまりコメントを書いていないですが、プログラマーなら大体の人が理解できるレベルかと思います。

<?php
//ini_set("display_errors","On");
session_start();
require "db_config.php";

//読み込みCSVファイル名セット
class csv
{
    /**
     * @param string $filename
     * @param int $cnt
     * @return Object
     */
    public function ini_csv($filename = "", $cnt = 0)
    {
        return new csv_read($filename, $cnt);
    }
}

//CSVデータを読み込ます
class csv_read
{
    var $max = 10000;
    var $cnt = 0;
    var $handle = null;
    /**
     * @param string $filename
     * @param int $cnt
     */
    public function __construct($filename = "", $cnt = 0)
    {
        $this->cnt = $cnt;
        $this->handle =  fopen($filename, "r");
        $_SESSION["offset"] ? fseek($this->handle, $_SESSION["offset"]) : $this->handle;
    }
    /**
     * @param int $header_skip
     * @return Object
     */
    public function reader($header_skip = 0)
    {
        if ($this->handle !== FALSE) {
            $response = null;
            $data = fgetcsv($this->handle, null, ",");
            if (!$header_skip || $_SESSION["offset"]) {
                if ($data !== FALSE) {
                    $_SESSION["offset"] = ftell($this->handle);
                    $response["data"] = $data;
                    $response["cnt"] = $this->cnt > $this->max ? 0 : ($this->cnt + 1);
                    $flag = true;
                } else {
                    $_SESSION["offset"] = null;
                    $flag = false;
                }
            } else {
                $_SESSION["offset"] = ftell($this->handle);
                $response["cnt"] = $this->cnt > $this->max ? 0 : ($this->cnt + 1);
                $flag = false;
            }
        } else {
            $_SESSION["offset"] = null;
            $flag = false;
        }
        return new table_save($flag, $response);
    }
}

//tableにCSVデータを保存
class table_save
{
    var $flag = false;
    var $result = null;
    /**
     * @param boolean $flag
     * @param array  $response
     * @return void
     */
    public function __construct($flag, $response)
    {
        $this->flag = $flag;
        $this->result = $response;
        $this->column_name = "name,,...";
    }
    /**
     * @param string  $column_name
     * @return void
     */
    public function tbl_save($column_name = "")
    {
        if ($this->flag) {
            $column = $column_name ? $column_name : $this->column_name;
            $is_column = explode(",", $column);
            foreach ($is_column as $key => $val) {
                $is_value[$val] = $this->result["data"][$key];
            }
            try {
                $pdo = new PDO(DSN, USERNAME, PASSWORD);
                $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                $sql = (function ($is_column) {
                    $INSERTFIRST = null;
                    $INSERTLAST = null;
                    foreach ($is_column as $key => $val) {
                        $INSERTFIRST[] = "$val";
                        $INSERTLAST[] = ":$val";
                    }
                    $INSERTSQL = "(" . implode(",", $INSERTFIRST) . ")values(" . implode(",", $INSERTLAST) . ")";
                    $UPDATESQL = null;
                    foreach ($is_column as $key => $val) {
                        $UPDATESQL[] = "$val = :$val";
                    }
                    return "INSERT INTO " . TABLENAME . $INSERTSQL . " ON DUPLICATE KEY UPDATE " . implode(",", $UPDATESQL) . ";";
                })($is_column);

                $stmt = $pdo->prepare($sql);
                foreach ($is_value as $key => &$value) {
                    $is_type = ($key === "test3" || $key === "test13") ? PDO::PARAM_INT : PDO::PARAM_STR;
                    $stmt->bindValue(":$key", $value, $is_type);
                }
                $this->result["sql"] = $stmt->execute();
            } catch (\Throwable $th) {
                //throw $th;
                $this->result = null;
                print $th->getMessage();
            }
        }
        print json_encode($this->result);
    }
}

//RUN...POST DATA
if (isset($_POST["csrf_token"])  && d_xss($_POST["csrf_token"]) === $_SESSION['csrf_token']) {

    $_SESSION["offset"] = (int)d_xss($_POST["reset_flag"]) === 1 ? null : d_xss($_SESSION["offset"]);
    $filename = d_xss($_POST["filename"]);
    $cnt = (int)d_xss($_POST["cnt"]);

    $column_name = "test1,test2,test3,test4,test5,test6,test7,test8,test9,test10,test11,test12,test13,test14,test15";
    $header_skip = 1;

    $csv = new csv();
    $csv->ini_csv($filename, $cnt)->reader($header_skip)->tbl_save($column_name);
    $csv = null;
} else {
    print "";
}
function d_xss($data){
    $data = strip_tags($data);
    $data = htmlspecialchars($data,ENT_QUOTES);
    return $data;
}
<?php
 // ログインした状態と同等にするためセッションを開始します
 session_start();
 // 暗号学的的に安全なランダムなバイナリを生成し、それを16進数に変換することでASCII文字列に変換します
  $toke_byte = openssl_random_pseudo_bytes(16);
  $csrf_token = bin2hex($toke_byte);
  // 生成したトークンをセッションに保存します
  $_SESSION['csrf_token'] = $csrf_token;
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<meta name="Description" content="Enter your description here"/>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.6.0/css/bootstrap.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css">
<title>CSV</title>
</head>
<body>
    <input type="hidden" name="csrf_token" value="<?=$csrf_token?>">
    <span class="h3" id="cnt"></span><br><br>
    <span class="h4" id="read_csv"></span><br><br>
    <span class="h4" id="debug"></span><br><br>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.1/umd/popper.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.6.0/js/bootstrap.min.js"></script>
<script>
    window.onload = function(){
        read_csv(0,1);
    };
    function read_csv(cnt,reset_flag){
        try{
            $.ajax({
            type: "post",
            url: "./assets/php/class_csv.php",
            async: false,
            data: {csrf_token:document.getElementsByName("csrf_token")[0].value,reset_flag:reset_flag,filename:"dummy.csv",cnt:cnt},
            dataType: "json",
            success: function (response) {
                    if(response){
                        cnt = response.cnt;
                        document.getElementById("cnt").innerText = cnt;
                        if(response.data){
                            document.getElementById("read_csv").innerText = response.data[0] + response.sql;
                            document.getElementById("debug").innerText = cnt ===21?response.data:document.getElementById("debug").innerText;
                        }
                        setTimeout(function(){read_csv(cnt)},0);
                    }
                }
            });
        }catch(e){
            console.warn(e);
            read_csv(cnt);
        }
    }
</script>
</body>
</html>

著者名  @taoka_toshiaki

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

タグ

0, , 7, 8, CSV, fgetcsv, github, null, php, PHPCODE, qiita, SQL, アクセス, エラー, コード, こちら, コマンド, これ, ご使用, ご自身, ダウンロード, ちょ, テーブル, ファイル, ブログ, リンク, , 一部, , , 今日, 保存, 動作, 参考, 変更, 実行, , 方法, 日差し, 昨日, 有言実行, 注目, 環境, , 簡単, 記載, 雛形,

Photo by Kevin Paster on Pexels.com

先日からNASを導入しました🍆。良かったことしかない。

2022.08.15

Logging

こんにちは。音楽を聞きながらブログを書いています。

先日、NASを導入しました。これによって自宅で作業していた事を外出先でも出来るようになりました。まだ外出先から本当に作業できるかはわからないけど、ファイルのダウンロードしたりすることは出来るのでそれだけでも満足です。

自分の使い道としては共有フォルダ(NAS)にソースコードを入れて作業しています。共有フォルダはパスコードでロックしています、ゲストは入れないような感じにしています。その中にソースコードを入れてVScodeで開発作業をしているって感じですね。

今回のNASの導入はとっても良かったと思います。どこからでも使用できるのは快適です。本当はもっと良いNASを導入すれば良かったのですが、今のところこれが精一杯かな。いま収入もないのであまり出費は良くないなって。

そういう事もあってもなくてもですが…。安定した収入を得るため転職活動やフリーランスエンジニアで自分にあった案件があれば応募していきます。それと並行して開発も進めていくつもりです、ちょっとしたツールから半年以上かかりそうなWEBサービス開発までトライして行こうと。まぁ前と同じですね。

著者名  @taoka_toshiaki

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

タグ

NAS, VScode, いま, ゲスト, コード, こと, これ, スエ, ソース, それだけ, ダウンロード, ため, どこ, ところ, パスコード, ファイル, フォルダ, フリーラン, ブログ, ロック, , , , 今回, 作業, 使い道, 使用, 先日, 共有, 出費, 収入, 外出, 安定, 導入, 快適, 感じ, 本当, 活動, 精一杯, 自分, 自宅, 転職, 開発, 音楽,

Photo by cottonbro on Pexels.com

新着記事が表示されるWPの非公式プラグインを作りました。

2022.07.24

Logging

こんにちは、朝の2時に起床し4時頃、ウォーキング。そして朝食後、コードを書いてその後、仮眠をとって今、記事を書いています。かなり不規則な生活リズムです😩、今日からは元の生活リズムへ戻そうと思っています。さて、WordPressの非公式プラグインを自前で制作致しましたのでお裾分けです。

今回はシングルページの記事の下に新着記事が表示されてカルーセルで動くというプラグインです。

新着記事が表示されるWPの非公式プラグインを作りました。

アイキャッチ画像の大きさなどはご自身でソースコードを変更してご使用ください。尚、アイキャッチ画像がないには対応しておりません。

いらないパラメーターを投げている所があります。そちらは御自身で修正をお願いします、因みに今は新着記事5記事を取得している感じです、そちらも変更はソースコードを修正してお使いいただければと思っています。

ダウンロードのURLは下記になります。

https://zip358.com/plugin/new-post.zip

追伸:カールセルUIはSlickを使用しております。

著者名  @taoka_toshiaki

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

タグ

2, 358, 4, 5, com, https, plu, url, WordPress, wp, www, zip, あい, ウォーキング, お使い, お裾分け, お願い, かなり, カルーセル, キャッチ, コード, ご自身, シングル, ソース, そちら, ダウンロード, パラメーター, プラグイン, ページ, リズム, , 下記, 不規則, , 今回, 今日, 仮眠, 使用, 修正, , 公式, 制作, 取得, 変更, 対応, , 感じ, , 新着, , 朝食, 生活, 画像, 自前, 自身, 表示, 記事, 起床,

Photo by Anete Lusina on Pexels.com

Netflixのミスター・ロボットっていうドラマを少し観ました。

2022.05.15

Logging

おはようございます。大阪行きの朝です😌。

先日、Netflixのミスター・ロボットっていうドラマを少し観ました。このドラマ、結構PCヲタク(ギーク)には「いいね」「最高」を貰えそうなドラマになっています。ついつい続きが観たくなる作りになっていますよね。そして、何処からが妄想なのか、全て現実なのかは全話見終わらないとわからないですが…見応えはあります。

「MR. ROBOT/ミスター・ロボット」予告編

コマンドや何やらもそんな感じですからね。なんか変なビジュアルを纏った映像ではなくTerminalでコマンドを打っているだけの映像になっていたりしてリアリティを感じます。

徐々にミスター・ロボットは観ていきたいと思っていて今は、一話目を半分ぐらいみた所です。Netflixアプリの良いところ?は視聴している動画を自動的にダウンロードしてくれる機能があり、仕事の休憩時間に視聴出来たりするところです。こういう機能は他のアプリにもあるかもしれないけども・・・。

便利ですよね(アマプラなどでも配信しています?)。

話変わって今日の8時ごろにANAに乗って大阪へ行きますので、その感想などは来週あたりには書けるかなと思います。尚、今日はリアルタイムに近況をツイートにUPするので応援、コメントよろしくお願いします!!

著者名  @taoka_toshiaki

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

タグ

Netflix, PC, Terminal, アプリ, ギーク, コマンド, ダウンロード, ところ, ドラマ, ビジュアル, ミスター, リアリティ, ロボット, ヲタク, , , 仕事, , 休憩, 何処, 作り, 先日, 全て, 全話, 動画, 半分, , 大阪, 妄想, 少し, 感じ, , 映像, 時間, 最高, , 機能, 現実, 見応え, 視聴,

お店のホームページ(サイト)の作り方その壱

2022.03.01

Logging

オハヨウゴザイマス。
片言の日本語しか使えない日本人です😌、高知県はあいにくの雨になるそうですね。

昨日のうちにお店のホームページ(サイト)の雛形作りをしておりました。デザインの参考にしたサイトはこちらになります。こちらのサイトデザインを元に自分が少しデザインを改良した感じです。

https://zip358.com/tool/sample.com/

こちらの画像や文言を変更することにより貴方が作成したいホームページが簡単にできてしまいます。解説はテキストで記載していきます。前手順としてVisualStudio codeとfilezillaソフトをWindowsやMacにインストールしてください。インストールの仕方はYOUTUBEで検索するといろいろな人が解説していますので、そちらを参考にしてください。

お店のホームページ(サイト)の作り方その壱-2

今回はお店のホームページ(サイト)の雛形をダウンロードして頂いてindex.phpというファイルをVisualStudio codeで開いてみてください。そうすると英字で記載している所が何箇所かあると思いますが英字は英字のままで何も変更しないでください、変更するのは日本語で記述されたところを貴方の店舗に合わして説明文を変更してみて保存してください。

お店のホームページ(サイト)の作り方その壱-1

画像を変えたい場合はimagesの中にある画像をそれぞれサンプルサイトを照らし合わせながら、貴方の店舗の画像に上書きしてください(画像名は変えないでください)。

次回は予約サイトの設定とGoogleMapの設定になります。

雛形はこちらからダウンロード:https://zip358.com/tool/sample.com.zip

著者名  @taoka_toshiaki

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

タグ

Code, filezilla, index, Mac, php, VisualStudio, Windows, youtube, あいにく, いろいろ, インストール, うち, オハ, お店, こちら, こと, サイト, そちら, ソフト, ダウンロード, テキスト, デザイン, ファイル, ホームページ, よう, , 今回, 仕方, 作り方, 作成, , 参考, , 変更, 少し, 感じ, 手順, 改良, 文言, 日本人, 日本語, 昨日, 検索, 片言, 画像, 簡単, 自分, 英字, 解説, 記載, 貴方, 雛形, , 高知県,

歩くことが楽しくなるピクミンブルームをスマホに?

2021.11.11

Logging

歩くことが楽しくなるピクミンブルームをスマホに入れていますか?、自分はまだこのアプリを入れていません。毎日のように歩いているので入れると楽しいのかなとは思いますが。ポケモンもスマホに入れたけれど遊ばなかったので、おそらくピクミンブルームもポケモンと同じ運命をたどるかなと思っています。なので、スマホに入れていませんが、楽しそうなゲームですよね。

https://www.youtube.com/watch?v=sP8y-0K2wKE

歩くことが楽しくなるゲームだと思います。

ピクミンが好きな人でダイエットやウォーキングをしている人などはこのアプリをインストールすると励みになったり継続する力になることは間違いないと思います。是非、アプリストアからダウンロードしてプレイしてみてはいかがでしょうか。尚、アプリをインストールしても自分には一銭も入りません。

ios⇒ https://apps.apple.com/app/id1556357398

Android⇒ https://play.google.com/store/apps/details?id=com.nianticlabs.pikmin

著者名  @taoka_toshiaki

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

タグ

-y, 0, 2, 8, Android, com, https, iOS, sP, watch, wKE, www, youtube, アプリ, いかが, インストール, ウォーキング, ゲーム, こと, ストア, スマホ, ダイエット, ダウンロード, ピクミン, ブルーム, プレイ, ポケモン, まだこ, 一銭, , , 毎日, 継続, 自分, 運命,

らくてんのアフィリエイトを記事の下に取り付けるプラグインを作りました。

2021.11.02

Logging

らくてんの アフィリエイト を記事の下に取り付けるプラグインを作りました。Composerを使用して楽天のSDKを取ってきているので、そちらをプラグインの中にインストールする必要と アフィリエイト のAPIIDなども必要になりますのでそちらも御自身で構える必要がありますが、それ程難しいことはないプログラムコードだと思います。

あとCSSなどもご自身が使用するサイトのデザインに合わしてご使用ください。今回、WordPressのプラグインですがソースコードを見たいだければ分かる通り、AmzのSDKも取り入れようかなとか思ったのですが、処理が重たくなり表示速度が下がりそうだったので辞めました。因みにAmzのSDKはComposerに公開していないようです。公式サイトからzipでダウンロードするか、githubから入手する方法しかないようですね。

仕様として、タグのワードから商品を検索し表示する方法とショートカットを使用して商品を表示させる方法があります。例えばRakuten_Seller_param type=”search” word=”ひろゆきのシン・未来予測”このようにショートコード書くと下記のように表示されます。また記事の最後に自動で紹介商品も表示されます。

追記:リクエストが多くなるとバグるみたいな‥‥。いまいち下記が表示されていない原因がわからない

追記:記事の最後に自動で紹介する機能は、このサイトでは一旦停止しています。

[Rakuten_Seller_param type=”search” word=”ひろゆきのシン・未来予測”]

トイウコトデ、WordPressのソースコードになります。

<?php
/*
Plugin Name: Rakuten_Seller
Plugin URI: https://zip358.com/
Description: 楽天アフィリエイトを表示
Author: @zip358com
Version: 0.1
Author URI: https://zip358.com/
*/
require_once plugin_dir_path( __FILE__ ).'/vendor/autoload.php';
define("RAKUTEN_YOUR_APPLICATION_ID","xxxxxxxxxxxxxxx");
define("RAKUTEN_YOUR_AFFILIATE_ID","xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");

define("AMAZON_YOUR_ACCESS_KEY_ID","");
define("AMAZON_YOUR_SECRET_KEY","");
define("AMAZON_YOUR_ENDPOINT","");
define("AMAZON_YOUR_URL","");


function Rakuten_Seller_content_plus($content) {
    if(is_single()) {
       $content.='[Rakuten_Seller_param type="auto"]';
    }
    return $content;
}

function Rakuten_Seller($params = array()){
     $htmlcode = "";
    extract(shortcode_atts(array(
        'type'=>'',
        'word'=>''
    ), $params));
    $client = new RakutenRws_Client();
    // アプリID (デベロッパーID) をセットします
    $client->setApplicationId(RAKUTEN_YOUR_APPLICATION_ID);
     
    // アフィリエイトID をセットします(任意)
    $client->setAffiliateId(RAKUTEN_YOUR_AFFILIATE_ID);

    if($type==="auto"){
        $tags = get_the_tags();
        $htmlcode.= "<div class='rakuten_seller_div'>";
        foreach( $tags as $tag) { 
            $htmlcode.= Rakuten_code($client,$tag->name);
        }        
        $htmlcode.= "</div>";
        
    }elseif($type==="search"){
        $htmlcode.= "<div class='rakuten_seller_div'>";
        $htmlcode.= Rakuten_code($client,$word);
        $htmlcode.= "</div>";
    }

    return $htmlcode;
 }

function Rakuten_code($client,$word="JavaScript"){
    $htmlcode = "";
   
    // IchibaItem/Search API から、keyword=$word を検索します
    $response = $client->execute('IchibaItemSearch', array(
      'keyword' => $word,
      'genreInformationFlag' => 1
    ));
    // レスポンスが正しいかを isOk() で確認することができます
    $cnt = 0;
    if ($response->isOk()) {
        foreach ($response as $item) {
           $htmlcode.= "<div class='rakuten_seller_item'>".
           "<img src='".$item["mediumImageUrls"][0]["imageUrl"]."'>".
           "<p>".$item["itemName"]."</p>".
           "<a class='rakuten_btn' href='".$item["affiliateUrl"] . "' title='".$item["itemName"]."'><span>楽天で購入"."</span></a></div>";
           $htmlcode.= amazon_code($item["isbn"],$item["jan"]);
           if($cnt>0){
                break;
           }
           $cnt++;
        }

    } else {
        //echo 'Error:'.$response->getMessage();
    }
    return $htmlcode;
}

function amazon_code($isbn="",$jan=""){
    $htmlcode = "";

    return $htmlcode;
}


add_shortcode('Rakuten_Seller_param', 'Rakuten_Seller');
add_filter('the_content', 'Rakuten_Seller_content_plus');

著者名  @taoka_toshiaki

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

タグ

Amz, APIID, Composer, css, github, SDK, WordPress, zip, あと, アフィリエイト, インストール, コード, こと, ご自身, サイト, ショート, ソース, そちら, ダウンロード, タグ, デザイン, プラグイン, プログラム, らくてん, ワード, , , 今回, 仕様, 使用, 入手, 公式, 公開, 処理, 商品, 必要, 方法, 検索, 楽天, 自身, 表示, 記事, 通り, 速度,

AWAY(アウェイ)、動物視点のゲーム。一見は百聞にしかず!!

2021.09.25

Logging

朝は本当に涼しくなってきましたね、何年ぶりだろうか、高知県で秋らしい秋になるのは毎年、秋っていう感覚がなくいきなり冬が来たって感覚がここ数年続いていたように思えます。そして去年よりも今年の冬は寒そうな予感さえします。

さて、AWAY(アウェイ)という変わったゲームを紹介します。このゲーム、動物を操作してそれぞれの視点を体感できるゲームになっています。今までも動物視点のゲームはあったんだけど、2022年に配信される AWAY(アウェイ) が一番リアルかなと思っています。値段も安くてダウンロード専用の通常版だと2,178円と格安です。

『AWAY』発売告知トレーラー

唯、こういうゲームはとても素晴らしいだけど、一般的にヒットするかと言えばそうではなく理科好きな少年少女たちにしか受け入れないのかもなと思ってしまいます・・・・。

尚、PS4、PS5に対応していますので、こういうジャンルが好きな方は是非遊んでみてください?。

著者名  @taoka_toshiaki

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

タグ

178, 2, 2022, 4, 5, AWAY, PS, アウェイ, ゲーム, ここ, ジャンル, それぞれ, ダウンロード, ヒット, リアル, 一見, 予感, 今年, 体感, 何年, 値段, , 動物, 去年, , 対応, 専用, 少女, 少年, 感覚, 操作, , , , 本当, 格安, 毎年, 理科, 百聞, , 紹介, 視点, 通常, 配信, 高知県,

格安スマホ・SIMで毎月1500円パケット通信使い放題なんですけどね。

2021.09.14

Logging

格安スマホ・SIMで毎月1500円パケット通信使い放題なんですけどね。自分は某パケット通信プラスというサービスを使っていて通信速度に1.5Mという縛りがあるものの、パケット通信使い放題(3日間で3G超えない場合は)なんですよ。自分が外で使うのはTwitterとニュースアプリ、そしてYOUTUBEミュージックぐらいのもの、外で動画を見る場合は大体、ダウンロードしといて観るので通信費はかからないって事で、通信費はかなり抑えています。

因みにパケット通信plus、格安スマホでググればヒットします。

通信速度は若干遅延があるのですが、1秒?3秒待てば表示されるのでそこは我慢ですかね。それに自分はモバイルwifiも無料枠(別途契約)で使ったりしますので、特に問題はありません。

スマホ代って固定費なので限界までおさえると、かなり年間の出費が抑えられると思います、昔はキャリアを使っていましたが、思い切って格安スマホにして今では良かったなって思えます。そんなに使ってもいないのに毎月、1万円ぐらい払っていた時期もありましたからね。

自分のおすすめはキャリアの格安スマホ版ではなく、格安スマホで名前の通っている格安スマホ会社が良いかと思います。理由はキャリアが始めた格安スマホはサポートは行き届いているかと思いますが、その分、値段が割高です。なので、格安スマホで名前の通っている会社の方が良いと思います。そして、スマホは一括払いで購入するかなどして購入するほうが良いです。

そういう事で格安スマホおすすめしますよ。

著者名  @taoka_toshiaki

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

タグ

, 1.5, 1500, , Plus, SIM, Twitter, wifi, youtube, アプリ, かなり, キャリア, サービス, スマ, スマホ, そこ, それ, ダウンロード, ニュース, パケット, ヒット, プラス, ミュージック, もの, モバイル, , 出費, 別途, 動画, 問題, 固定, 場合, , 大体, 契約, 年間, 我慢, 放題, , , 格安, 毎月, 無料, 縛り, 自分, 若干, 表示, 通信, 速度, 遅延, 限界,

radiko[ラジコ]のWindowsアプリがないので作りました。

2021.03.24

Logging

昔、ラジコのWindowsアプリが存在していたのだけど今は使えなくなっていたのでradiko[ラジコ]のWindowsアプリを作りました。簡単な仕様です・・・とても簡単で単なるwebブラウザをはめ込むようにしているだけです。なのでこのページからリンクを辿れば別のサイトに移動することができます。何故、これを作ったのかというとブラウザとは別にアプリとして開きたかったという経緯があります。動作環境はwindows10です。

使用したい方は下記のURLからダウンロードしてくださいませ。

https://zip358.com/tool/radiko-view-Setup-1.0.0.zip

著者名  @taoka_toshiaki

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

タグ

1.0.0, 10, 358, com, https, Radiko, radiko-view-Setup-, tool, url, web, Windows, www, zip, アプリ, こと, これ, サイト, ダウンロード, ブラウザ, ページ, ラジコ, リンク, 下記, , 仕様, 使用, , 動作, 存在, , , 環境, 移動, 簡単, 経緯,

spaceXには夢があるよね。

2020.10.31

Logging

100 Successful Flights

spaceXには夢があるよね。失敗もかなりしたけど諦めずに試行錯誤を続けていまでは、成功が続いています。今年か来年には野口さんを載せて宇宙ステーションへいくらしい。安定した運用しているけれど、やはりそれでも心配します。ミスが許されない現場ってのは本当に大変な仕事だと思います。

How Not to Land an Orbital Rocket Booster

spaceXのミッションに火星移住計画ってのも在るけど、それは当分先の話だと思います。それよりも自分はstarlinkが気になるところです、starlinkってのは地球上どこにいても軌道衛星を介してインターネットができるようになるという計画です。いまstarlinkのアプリがダウンロードできるようになっているだとか、使用するには1万円ぐらいの月額費用がかかるので試した人は少ないと思います。自分も高くて手が出せない、これが毎月、使用した金額や安価な金額になると世の中、がらりと変わっていくだろうなという思いがあります。

Falcon Heavy & Starman

いままで、情報を得ることが出来なかった人々が、情報にアクセスができるという事は凄く意義のあることだと思うし、そして何より知ることにより新たな化学反応のような事が世界各地で起きる時代になるのではないかと、いまから期待しています。本当に世界規模のデジタル民主化が起きれば良いのになぁと。

あと10年後には世の中、少しは良くなっていることを祈ります。

著者名  @taoka_toshiaki

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

タグ

, spaceX, starlink, アプリ, いま, インターネット, かなり, これ, ステーション, それ, ダウンロード, どこ, ところ, ミス, ミッション, , , , , 今年, 仕事, 使用, 地球, , 大変, 失敗, 宇宙, 安価, 安定, 当分, 心配, 情報, 成功, , 月額, 本当, 来年, 毎月, , 火星, 現場, 移住, 自分, 衛星, 計画, 試行錯誤, , 費用, 軌道, 運用, 野口, 金額,

PowerShellであれ使えるだな。

2020.10.15

Logging


wget "ダウンロードするファイルのURL" -OutFile "保存先ファイルパス"

あれというのはwgetというダウンロードするときなどに使用するcommandです。リナックス系を使用している人には使っている方も多いかもしれない。そんな素敵なcommandがウィンドウズ10のPowerShell7では使用できるみたいだ。

大量画像にダウンロードする必要があったのでダウンロードファイルをリスト化、command打つように変換した。結果、とても楽です。

事務作業している方でIT好きな方はVBAを勉強してみると確実に仕事の効率化に繋がると思っています、たまにPythonをオススメするひともいるだけど、自分はあまりオススメしません。

なぜなら、一般的な事務員さん全員がそれを取り扱えるとは思わないからです。なのでクリックすれば動くよみたいな物が作れてパソコンの環境を変えないで良いのはVBAぐらいかと思います。PowerShellでもパソコンの環境を変更しないと動かないですからね。

バッチ処理などは一般的なひとはやはりハードルが高いと思ふ・・・?

著者名  @taoka_toshiaki

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

タグ

-Command, -OutFile, 10, 7, IT, powershell, Python, quot, url, VB, VBA, wget, あれ, ウィンドウズ, おすすめ, クリック, それ, ダウンロード, たま, とき, パス, パソコン, ひと, ファイル, リスト, リナックス, 事務, , 仕事, 作業, 使用, 保存, 全員, 効率, 勉強, 変換, 大量, 必要, , , 環境, 画像, 素敵, 結果, 自分,

やってみよー、フラワーズ ボミング ホーム。

2020.08.28

Logging

フラワーズ ボミング ホームとは何か?下記の引用を参照してください。

自分が描いた花をアップロードすることで、世界中の人が描いた花々と一緒に、テレビモニターのなかで咲き乱れるというもの。描いた花は、ゆっくりと幻想的に散っていき、これまで体験したことのないアートの世界を堪能できるのだとか

引用元:https://tabi-labo.com/

実際の動画がこれです。

Flowers Bombing Home

実際、じぶんもお絵かき用のファイルをダウンロードしてのりえをしてアップロード後、ライブ配信の映像を55インチのテレビに映し出してみた。ちなみにテレビに映像を写すには別途、クロームキャストなどの機器が必要となります。感想からすると子供から大人まで楽しめる仕様になっているかなと思います。とくに子供は喜びそうですね。ぜひ、これご自宅で体験してみてください。

詳細内容はこちら
https://www.teamlab.art/jp/w/flowers_bombing_home/
https://flowers-bombing-home.teamlab.art/jp/paint
https://www.youtube.com/c/teamLabART/live

著者名  @taoka_toshiaki

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

タグ

55, 7, com, Ep-dQ, https, tabi-labo, VO-lk, watch, www, youtube, アート, アップロード, クロームキャスト, こと, これ, これまで, ご自宅, じぶん, ダウンロード, テレビ, なか, のりえ, ファイル, フラワーズ, ホーム, ボミング, モニター, もの, ゆっくり, ライブ, 下記, 世界, , 仕様, 体験, , 別途, 動画, 参照, 大人, 子供, 実際, 引用, 必要, 感想, 映像, 機器, 絵かき, 自分, , 花々, 詳細, 配信,

bingから画像を一括ダウンロードするアプリ。

2020.06.14

Logging

任意のキーワード検索でbing画像からを一括ダウンロードするアプリを作りました。img-dl-bing-sss.exeファイルを起動すると動画のようなコンソール画面が開くので入力してダウンロードを開始してください。ダウンロードが終わると勝手に閉じます。

なお、一応R指定にも対応しています、キーワードがR指定項目かもと思う場合、Yと入力ください。
新垣結衣さんの熱烈なファンでもないですが、綺麗な方だとは思います。ということで例として使用させて頂きました、、、関係者の皆様ごめんなさい。

bingから画像を一括ダウンロードするアプリ

このアプリはウィンドウズ10環境で動作します。また、動作しないブロックされる場合は下記のURL等を参照しブロックを解除しお使いください。ブロック解除方法:https://forest.watch.impress.co.jp/docs/news/1130655.html

※なお、Bingサイトのデザインが変わった場合、動作しなくなりますのであしからず。

画像ダウンロードアプリのソースコードはこちら(古いコードですので動かない場合がありますVS2019C#)

using System;
using System.Runtime.CompilerServices;

namespace img_dl_bing_sss
{
    class Program
    {
        static void Main(string[] args)
        {
            string keyword = "",R18="";
            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine("処理中は画面や立ち上がったブラウザを閉じないでください。\n" +
                "処理が完了すると「***終了します***」と表示されます。\n" +
                "何かキーを押し終了してください\n\n");


            Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine("↓検索キーワードを入力しエンターを押してください");
            keyword = Console.ReadLine();
            Console.ForegroundColor = ConsoleColor.White;
            Console.WriteLine("↓R指定ですか?\nY or N かの文字を入力しエンターを押してください");
            R18 = Console.ReadLine();
            Console.ForegroundColor = ConsoleColor.Yellow;
            Console.WriteLine("***画像のダウンロード量(画像数ではありません) 1?999 ***");
            var scroll = 9999;
            try
            {
                scroll = int.Parse(Console.ReadLine());
                if(scroll >=1 && scroll <= 999)
                {
                    scroll = scroll * 9999;
                }
            }
            catch
            {
                Console.ForegroundColor = ConsoleColor.Yellow;
                Console.WriteLine("***検索キーワードが不適切です。***");
            }
            SuiteTests img =  new SuiteTests();
            if (img.Imgdlok(keyword, R18, scroll))
            {
                img.Dispose();
            }
            else {
                Console.ForegroundColor = ConsoleColor.Yellow;
                Console.WriteLine("***検索キーワードが不適切です。***");
            }
            Console.ForegroundColor = ConsoleColor.Yellow;
            Console.WriteLine("***終了します***");
            
        }
    }
}
// Generated by Selenium IDE
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Firefox;
using OpenQA.Selenium.Remote;
using OpenQA.Selenium.Support.UI;
using OpenQA.Selenium.Interactions;
using Xunit;
using AngleSharp;
using AngleSharp.Html.Parser;
using AngleSharp.Html.Dom;
using AngleSharp.Dom;
using System.Runtime.InteropServices;
using Newtonsoft.Json;
using System.IO;
using System.Net;

public class SuiteTests : IDisposable {
  public IWebDriver driver {get; private set;}
  public IDictionary<String, Object> vars {get; private set;}
  public IJavaScriptExecutor js {get; private set;}
  public SuiteTests()
  {
    driver = new ChromeDriver();
    js = (IJavaScriptExecutor)driver;
    vars = new Dictionary<String, Object>();
  }
  public void Dispose()
  {
    driver.Quit();
  }
  public bool Imgdlok(string keyword="", string R18= "",int scroll = 999999)
    {
        if (keyword == "") return false;
        Console.Clear();
        string path = System.IO.Directory.GetCurrentDirectory() + "\\IMG\\";
        if (!Directory.Exists(path))
        {
            Directory.CreateDirectory(path);
        }
        driver.Navigate().GoToUrl("https://www.bing.com/?scope=images&nr=1&FORM=NOFORM");
        driver.Manage().Window.Size = new System.Drawing.Size(945, 1030);
        driver.FindElement(By.Id("sb_form_q")).Click();
        driver.FindElement(By.Id("sb_form_q")).SendKeys(keyword);
        driver.FindElement(By.CssSelector(".search.icon.tooltip")).Click();
        try
        {
            if (R18 == "Y")
        {
            driver.FindElement(By.LinkText("設定の変更")).Click();
            driver.FindElement(By.CssSelector("#settings_safesearch div:nth-child(3)")).Click();
            driver.FindElement(By.Id("adlt_set_off")).Click();
            driver.FindElement(By.Id("sv_btn")).Click();
            driver.FindElement(By.Id("adlt_confirm")).Click();
        }
        }
        catch
        {
            Console.ForegroundColor = ConsoleColor.Yellow;
            Console.WriteLine("***R指定ではありません***");
        }
        try
        {
            double ps = 0;
                for (int i = 99; i < scroll;i+=1000)
            {

                js.ExecuteScript("window.scrollTo(0," + i + ")");
                Console.CursorLeft = 0;
                ps = (double)(((double)i / (double)scroll) * 100);
                Console.Write("処理中::{0:D2}%",(int)ps);
            }
        }
        catch
        {
            Console.ForegroundColor = ConsoleColor.Yellow;
            Console.WriteLine("***Max画像まで到達しました***");
        }
        Console.ForegroundColor = ConsoleColor.White;
        Console.WriteLine("\n***ダウンロード処理開始***\n");
        int cnt = 0;
        var elm = driver.FindElements(By.ClassName("iusc"));
        driver.Manage().Window.Minimize();
        foreach (var e in elm) {
           dynamic jsondata = JsonConvert.DeserializeObject(e.GetAttribute("m"));
            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine((string)jsondata.murl + "::wait.....");
            string imgurl = (string)jsondata.murl;
            if(4 <= Path.GetExtension(imgurl).Length && Path.GetExtension(imgurl).Length <= 5)
            {
                try
                {
                    cnt++;
                    string ext = Path.GetExtension(imgurl);
                    WebClient myWebClient = new WebClient();
                    myWebClient.DownloadFile(imgurl, path + "No-" + cnt + "-" + keyword + ext);
                    myWebClient.Dispose();
                    Console.ForegroundColor = ConsoleColor.Cyan;
                    Console.WriteLine("***" + cnt +"::" + imgurl + "\n::ダウンロード中、画面を閉じないでください...***");
                    Console.ForegroundColor = ConsoleColor.Green;
                    Console.WriteLine("***" + cnt + "::ダウンロード済***");
                }
                catch
                {
                    Console.ForegroundColor = ConsoleColor.Yellow;
                    Console.WriteLine("***ダウンロードが失敗しました***");
                }

            }else{
                Console.ForegroundColor = ConsoleColor.Yellow;
                Console.WriteLine("***画像の拡張子が不明のためダウンロードが失敗しました***");
            }
        }
        Console.ForegroundColor = ConsoleColor.Blue;
        Console.WriteLine("***ダウンロード完了しました***\n" + path);
        return true;
  }
}

著者名  @taoka_toshiaki

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

タグ

10, bing, exe, img-dl-bing-sss, url, VS, アプリ, ウィンドウズ, キーワード, コード, こちら, こと, コンソール, サイト, ソース, ダウンロード, デザイン, ファイル, ファン, ブロック, 一括, 下記, 任意, 使用, , 入力, 動作, 動画, 勝手, 参照, 場合, 対応, 指定, 新垣結衣, , 方法, 検索, 環境, 画像, 画面, 皆様, , 綺麗, 解除, 起動, 開始, 関係者, 項目,

ダラダラとLaravel構築してみた解説あり(*´?`*)

2020.06.02

Logging

https://www.youtube.com/watch?v=UdD5oO2f8ko

Laravelをインストール手順を動画にしました。いらない手順が含まられていますが・・・。気にしないでください!!

ちなみに適当な動画は無音ですみません。尚、PHPがタイムアウトしてComposerがインストール出来ない場合はポートの解放が出来ているか、IPv6が有効になっていないかなど調べてくだいね。なお、自分の場合、IPv6が有効になっていてダウンロードが出来ない状態でした(´・ω・`)。

お世話になったサイトはこちらです。こちらの手順通り対応しvirtualBOX、いや仮想環境を再起動してあげてください。そうするとすんなりダウンロード出来ます。それでもダウンロード出来ない場合はアドレスからgetcomposer.orgからダウンロードする手段もありますが、恐らくその後のComposerインストールで躓くはずです。サーバー環境を見直すと良いでしょう。

https://www.server-memo.net/centos-settings/centos7/disable-ipv6.html
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === 'e0012edf3e80b6978849f5eff0d4b4e4c79ff1609dd1e613307e16318854d24ae64f26d17af3ef0bf7cfb710ca74755a') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"
composer create-project laravel/laravel example-app

最後にLaravelのドキュメントのリンクを貼っときますm
https://laravel.com/docs/8.x/installation

著者名  @taoka_toshiaki

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

タグ

6, Composer, getcomposer, https, IPv, Laravel, org, php, server-me, virtualBOX, www, アドレス, いね, インストール, お世話, くだ, こちら, サーバー, サイト, タイムアウト, ダウンロード, パス, ポート, 仮想, 再起動, 動画, 場合, 対応, , 手段, 手順, 有効, 構築, , 無音, 状態, 環境, 自分, 解放, 解説, 適当,

windows Terminal1.0を使ってみた。

2020.05.24

Logging

windows Terminal1.0を使ってみた、感想はカスタマイズして何だか良い感じですね。これからVS codeみたいにバージョンアップすればいろいろと便利になるみたいなので、良い感じです。今後に期待感もあります。

The new Windows Terminal

因みにカスタマイズの方法は公式ページに日本語で書かれているのでなんて親切なんだと思ってしまいました。
こちらがそのページになります。json形式の記述でカスタマイズすることでカラーの変更や透過することなど自分好みにwindows Terminalをカスタマイズすることが可能です。

https://docs.microsoft.com/ja-jp/windows/terminal/customize-settings/profile-settings

尚、windows Terminalのダウンロードはこちらからになります。
https://www.microsoft.com/ja-jp/p/windows-terminal-preview/9n0dx20hk701?activetab=pivot:overviewtab

著者名  @taoka_toshiaki

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

タグ

1.0, Code, com, customize-settings, docs, https, ja-j, ja-jp, json, microsoft, profile-settings, Terminal, VS, Windows, www, アップ, いろいろ, カスタマイズ, カラー, こちら, こと, これ, ダウンロード, バージョン, ページ, 今後, 便利, 公式, 可能, 変更, 形式, 感じ, 感想, 方法, 日本語, 期待感, 自分, 親切, 記述, 透過,

ブラウザのプッシュ通知が簡単にできちゃうFirebase

2020.03.20

Logging

ブラウザのプッシュ通知が簡単にできちゃうFirebaseのでやり方を簡略的に記載します。

  1. Firebaseにプロジェクトを作成する(グーグルのアカウントが必要)。
  2. firebase cliというパッケージソフトをOSにダウンロードしそのソフトを任意のフォルダの中に移動させて起動させる。Node.jsはインストール済みとする(※手順)。
  3. 試しにホスティングしてみる。ホスティングはプロジェクトの左側の項目よりホスティングをクリックすると手順の説明通り行うと出来ます。
  4. URLより確認し表示されているか確認する。
  5. Cloud Messagingの設定よりFCM でウェブ認証情報を設定するからメッセージング オブジェクトを取得するまでをブラウザで操作し設定を行う。
  6. ローカルに下記のURLよりファイルをダウンロードする。ダウンロードするファイルはfirebase-messaging-sw.js, firebase-logo.png, index.html, main.cssになります。動かない場合は再設定が必要。
    https://github.com/firebase/quickstart-js/tree/f76b14ca00cca48dbfca5c787c0a4ca73eb9857d/messaging
  7. ダウンロードしたファイルはpublicか自分が決めたフォルダに入れる。
  8. index.htmlソースの中に ‘<YOUR_PUBLIC_VAPID_KEY_HERE>’ と記載している部分があるので変更する。
  9. firebase cli より『 firebase deploy』する。
  10. ページを再読み込みして通知を許可する。
  11. Cloud Messagingから送信してみる。
  12. 通知が届くことを確認する。
    ※今回はブラウザのプッシュ通知なのでアプリを追加する際はWEB(</>)を選んでください。
Introducing Firebase Cloud Messaging

ではでは?健闘を祈る?

著者名  @taoka_toshiaki

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

タグ

cli, Cloud, FCM, Firebase, firebase-logo, firebase-messaging-sw, index, JS, Messaging, node, OS, png, url, アカウント, インストール, ウェブ, オブジェクト, グーグル, クリック, ソフト, ダウンロード, パッケージ, ファイル, フォルダ, プッシュ, ブラウザ, プロジェクト, ホスティング, メッセージング, やり方, ローカル, 下記, , 任意, 作成, 取得, 左側, 必要, 情報, 手順, 操作, 確認, 移動, 簡単, 簡略, 表示, 記載, 設定, 認証, 説明, 起動, 通知, 項目,

松岡茉優さんが歌う『どんなときも。』が好きです。

2020.03.16

Logging

松岡茉優さんが歌う『どんなときも。』が好きです。上手いかというよりは何気ないから好きなのかもしれないなと。ある意味非売品ですよね…商品化していない歌声です。普通に売り出したら松岡茉優さんなら、買う人はいると思うですけどね。ちなみにYOUTUBEから音源を取り出すサービスがあるそうですが、それほど難しい事ではないです。エンジニアならコマンドで何とかなるレベルです。

【MV】松岡茉優が槇原敬之の名曲『どんなときも。』をカバー

ちなみにYOUTUBEをダウンロードするソースコードみたいなのは以前、ブログで記載したと思います。あのソースコードをコマンド用に直すと使いやすいかもしれません。

著者名  @taoka_toshiaki

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

タグ

youtube, エンジニア, コード, コマンド, サービス, ソース, ダウンロード, どんなときも。, ブログ, レベル, , , 以前, 商品, 意味, 普通, 松岡茉優, 歌声, 記載, 非売品, 音源,

都道府県にカーソルを乗せると色が変わるちょっとした奴ムフ。

2020.03.09

Logging

JSONファイル、JSファイル、htmlファイルはそれぞれ下記になります。ちなみにいま作っている、あるサービスに使うために作ったもののお裾分けです。雛形として作っているのでおそらく、編集しやすいかなと思います。なお、SVGファイルは自分のソースからダウンロードするか、提供元のSVGをダウンロードするかしてください。ちなみにSVGは日本地図の標準をダウンロードしています。

デモ8:: https://zip358.com/tool/demo8/

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
    <script src="common.js"></script>
    <title>Document</title>
</head>
<body onload="ken()">
    <object id="svg_ken" data="jpn03_a4.svg" type="image/svg+xml" width="700" height="700"></object><br>
    <a target="new456" rel="license" href="http://creativecommons.org/licenses/by-nc/2.1/jp/"><img alt="Creative Commons License" style="border-width: 0" src="http://i.creativecommons.org/l/by-nc/2.1/jp/88x31.png"></a><br>
    データ引用元:<a target="new123" href="https://www.kabipan.com/geography/whitemap/">https://www.kabipan.com/geography/whitemap/</a><br>
</body>
</html>
{
    "kenmei":[
        {"id":"1","ken":"北海道","eiji":"HOKKAIDO"},
        {"id":"2","ken":"青森県","eiji":"AOMORI"},
        {"id":"3","ken":"岩手県","eiji":"IWATE"},
        {"id":"4","ken":"宮城県","eiji":"MIYAGI"},
        {"id":"5","ken":"秋田県","eiji":"AKITA"},
        {"id":"6","ken":"山形県","eiji":"YAMAGATA"},
        {"id":"7","ken":"福島県","eiji":"FUKUSHIMA"},
        {"id":"8","ken":"茨城県","eiji":"IBARAKI"},
        {"id":"9","ken":"栃木県","eiji":"TOCHIGI"},
        {"id":"10","ken":"群馬県","eiji":"GUNMA"},
        {"id":"11","ken":"埼玉県","eiji":"SAITAMA"},
        {"id":"12","ken":"千葉県","eiji":"CHIBA"},
        {"id":"13","ken":"東京都","eiji":"TOKYO"},
        {"id":"14","ken":"神奈川県","eiji":"KANAGAWA"},
        {"id":"15","ken":"新潟県","eiji":"NIIGATA"},
        {"id":"16","ken":"富山県","eiji":"TOYAMA"},
        {"id":"17","ken":"石川県","eiji":"ISHIKAWA"},
        {"id":"18","ken":"福井県","eiji":"HUKUI"},
        {"id":"19","ken":"山梨県","eiji":"YAMANASHI"},
        {"id":"20","ken":"長野県","eiji":"NAGANO"},
        {"id":"21","ken":"岐阜県","eiji":"GUFU"},
        {"id":"22","ken":"静岡県","eiji":"SIZUOKA"},
        {"id":"23","ken":"愛知県","eiji":"AICHI"},
        {"id":"24","ken":"三重県","eiji":"MIE"},
        {"id":"25","ken":"滋賀県","eiji":"SHIGA"},
        {"id":"26","ken":"京都府","eiji":"KYOTO"},
        {"id":"27","ken":"大阪府","eiji":"OSAKA"},
        {"id":"28","ken":"兵庫県","eiji":"HYOGO"},
        {"id":"29","ken":"奈良県","eiji":"NARA"},
        {"id":"30","ken":"和歌山県","eiji":"WAKAYAMA"},
        {"id":"31","ken":"鳥取県","eiji":"TOTTORI"},
        {"id":"32","ken":"島根県","eiji":"SHIMANE"},
        {"id":"33","ken":"岡山県","eiji":"OKAYAMA"},
        {"id":"34","ken":"広島県","eiji":"HIROSHIMA"},
        {"id":"35","ken":"山口県","eiji":"YAMAGUCHI"},
        {"id":"36","ken":"徳島県","eiji":"TOKUSHIMA"},
        {"id":"37","ken":"香川県","eiji":"KAGAWA"},
        {"id":"38","ken":"愛媛県","eiji":"EHIME"},
        {"id":"39","ken":"高知県","eiji":"KOUCHI"},
        {"id":"40","ken":"福岡県","eiji":"FUKUOKA"},
        {"id":"41","ken":"佐賀県","eiji":"SAGA"},
        {"id":"42","ken":"長崎県","eiji":"NAGASAKI"},
        {"id":"43","ken":"熊本県","eiji":"KUMAMOTO"},
        {"id":"44","ken":"大分県","eiji":"OOITA"},
        {"id":"45","ken":"宮崎県","eiji":"MIYAZAKI"},
        {"id":"46","ken":"鹿児島県","eiji":"KAGOSHIMA"},
        {"id":"47","ken":"沖縄県","eiji":"OKINAWA"}
        ]
}

function ken() {
    $.getJSON("ken.json", function (json) {
        var svg_ken = document.getElementById('svg_ken').contentDocument;
        var ken = $(svg_ken);
        ken.find('path').attr('fill', '#fff');
        ////
        for (var i = 0; i < 47; i++) {
        ken.find("[id='" + json.kenmei[i].eiji + "']").on("click",{i:i,json:json},function (event) {
            window.location.href = "/page/" + event.data.json.kenmei[event.data.i].id;
        });
        }
        ////
        for (var i = 0; i < 47; i++) {
            ken.find("[id='" + json.kenmei[i].eiji + "']").hover(
                function () {
                    $(this).attr('fill', '#4080ff');
                },
                function () {
                    $(this).attr('fill', '#fff');
                });
        }
    });
}

著者名  @taoka_toshiaki

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

タグ

358, 8, charset, com, content, demo, device-widt, DOCTYPE, gt, head, html, https, ja, JS, json, lang, lt, meta, name, quot, SVG, tool, UTF-, viewport, Width, zip, いま, お裾分け, カーソル, サービス, ソース, それぞれ, ダウンロード, ため, デモ, ファイル, ムフ, 下記, 地図, , 提供, 日本, 標準, 編集, 自分, , 都道府県, 雛形,

テキストを日本語ボイスに変換してくれるしょぼいWindowsソフトを作ったよ。

2020.01.21

Logging

VS2017のC#で、テキストを日本語ボイスに変換してくれるしょぼいWindowsソフト( 滑舌が悪いけどYOUTUBERしたい人用)を作ったよ。自分はかなり滑舌悪いくてどもるので、YOUTUBER向かないのですがユーチューバーしてみたい願望があったので、Gさんの「Cloud Text-to-Speech API」で適当に作ってみた。ちなみにまだYOUTUBERするかは決めてない!

APIですが月に0?100万文字までは無料枠なので、大量に使わない限り無料枠で収まると思います。これを他の人に提供しようとするとアウトだろうけど・・。
自分だけが使用するのには何とかその範囲内かと思います。

尚、ソースコードを提供します可変してお好みで使ってください。大量のテキストをボイス変換した場合、ビジーになるかもしれません。そこら辺の処理は入れてません。またGさんからダウンロードしたJSONファイルを置いている階層に合わしてください。

参考にしたサイトは下記になります。
https://cloud.google.com/text-to-speech/docs/quickstart-client-libraries?hl=ja#client-libraries-install-csharp

フォームのオブジェクトの配置は下記になります。画像を参照ください。

ソースコードは下記になります。

using System;
using System.IO;
using System.Windows.Forms;
using Google.Cloud.TextToSpeech.V1;
namespace テキストを日本語ボイスする
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            if(richTextBox1.Text.Replace("\r", "").Replace("\n", "") == "")
            {
                MessageBox.Show("文字を入力してください");
                return;
            }
            Environment.SetEnvironmentVariable("GOOGLE_APPLICATION_CREDENTIALS", "C:\\xxxxx\\xxxxx\\xxxxx\\xxxxx.json", EnvironmentVariableTarget.Process);
            TextToSpeechClient client = TextToSpeechClient.Create();
            SynthesisInput input = new SynthesisInput
            {
                Text = richTextBox1.Text.Replace("\r", "").Replace("\n", "")
            };
            VoiceSelectionParams voice = new VoiceSelectionParams
            {
                LanguageCode = "ja-JP",
                Name = "ja-JP-Wavenet-A",
                SsmlGender = SsmlVoiceGender.Neutral,
            };
            AudioConfig config = new AudioConfig
            {
                AudioEncoding = AudioEncoding.Mp3,
                SpeakingRate = f1(trackBar1.Value),
                Pitch = f2(trackBar2.Value),
            };
            var response = client.SynthesizeSpeech(new SynthesizeSpeechRequest
            {
                Input = input,
                Voice = voice,
                AudioConfig = config
            });
            DateTime dt = DateTime.Now;
            string dttimename = dt.ToString("yyyy-MM-dd-HH-mm-ss");
            using (Stream output = File.Create("voice-" + dttimename + ".mp3"))
            {
                response.AudioContent.WriteTo(output);
                Console.WriteLine($"Audio content written to file 'voice - " + dttimename + ".mp3'");
                MessageBox.Show("生成しました=>>voice - " + dttimename + ".mp3");
                System.Diagnostics.Process.Start(Directory.GetCurrentDirectory());
            }
        }
        private void trackBar1_ValueChanged(object sender, EventArgs e)
        {
            label3.Text = string.Format("{0:0.00}", f1(trackBar1.Value));
        }
        private void trackBar2_ValueChanged(object sender, EventArgs e)
        {
            label4.Text = string.Format("{0:0.00}", f2(trackBar2.Value));
        }
        private double f1(int a) {
            return Convert.ToDouble(a) / 100;
        }
        private double f2(int a)
        {
            return Convert.ToDouble(a) - 20;
        }
    }
}

変換したボイスはこんな感じです!

著者名  @taoka_toshiaki

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

タグ

0, 100, 2017, API, Cloud, json, Text-to-Speech, VS, Windows, YOUTUBER, アウト, お好み, かなり, コード, これ, ソース, そこら辺, ソフト, ダウンロード, テキスト, ビジー, ファイル, ボイス, ユーチューバー, , , , 使用, 処理, 場合, 変換, 大量, 提供, 日本語, , , 滑舌, 無料, 範囲, 自分, 適当, 限り, 願望,

一時間に一回だけAPIを実行するPHPのオブジェクトファイル

2020.01.10

Logging

あるユーザーが公開しているプログラミングを参考にして
オブジェクト化してみた。
参考にしたサイトのリンクは下記になります。
phpでapiを切りの良い時刻までキャッシュする

尚、動作環境はPHP5.6以上になります、と言いつつ
動作テストは行っていないので、もしかしたらエラーで動かないかも?
動作内容はJSONファイルの更新時間( hour )と
サーバの 時間 ( hour ) を比べ差異があれば
APIを呼び出し結果をJSONファイルとして上書き保存します。
そのため、一時間に一回だけ更新処理が走ります。
(※CRONで設定していれば)

結果がJSONで返ってこない場合などは可変して頂いて構いません。
もともと自分の案でもないので…。

PHPファイルのダウンロードはこちらから
https://zip358.com/tool/timeKeeper/timeKeeper.zip

ソースコードはこちらになります(* ̄(エ) ̄*)

<?php
class timeKeeper{
    public static $json_filename = "abc.json";
    public static $json_api_url = "https://example.com/api/?v=1.333";
    public static function judge(){
        $server_timestamp = time();
        $server_time = date('Y/m/d H',$server_timestamp);
        $json_timestamp = filemtime(self::$json_filename);
        $json_time = date('Y/m/d H',$json_timestamp);
        return $server_time === $json_time ? true : false;
    }
    public static function api_run($opts=null){
        if(is_null($opts))return false;
        $context = stream_context_create($opts);
        $json = file_get_contents(self::$json_api_url, false, $context);
        $fp = fopen(self::$json_filename, "w");
        fwrite($fp,$json);
        fclose($fp);
        return self::json_load();
    }
    public static function json_load(){
        $json = file_get_contents(self::$json_filename);
        return json_decode($json, true);
    }
    public static function check(){
        if(file_exists(self::$json_filename)){
            return self::judge();
        }
        return false;
    }
}
///使用例
if(timeKeeper::check()){
   $json = timeKeeper::json_load();
}else{
    $opts = array(
        "http"=>array(
        "method" => "POST",
        "header" => "User-Agent: php"
        )
    );
    $json = timeKeeper::api_run($opts);
}

著者名  @taoka_toshiaki

Profile
高知県在住の@taoka_toshiakiです、記事を読んで頂きありがとうございます.
数十年前から息を吸うように日々記事を書いてます.たまに休んだりする日もありますがほぼ毎日投稿を心掛けています😅.
SNSも使っています、フォロー、いいね、シェア宜しくお願い致します🙇.
SNS::@taoka_toshiaki

タグ

5.6, API, class, cron, hour, json, lt, php, public, timeKeeper, エラー, オブジェクト, キャッシュ, コード, こちら, サーバ, サイト, ソース, ダウンロード, ため, テスト, ファイル, プログラミング, ユーザー, リンク, , 上書き, 下記, 保存, 公開, 内容, 処理, 動作, 参考, 場合, 実行, 差異, 時刻, 時間, 更新, , 環境, 結果, 自分, 設定,