音声文字起こし試してみたローカル環境・Srtファイルにコンバート

2024.08.31

Logging

おはようございます.某会社のブログで音声文字起こしのやり方を記載されていたのを見てローカル環境でも文字起こしが出来そうだなって試してみたら出来たのでお裾分けです.

最初、Docker環境でwhisperとffmpegpythonがあれば上手く機能すると思っていたのだけど甘かった.ffmpegpythonだけインストールしても動かないようなのでffmpeg本体を公式サイトからダウンロードして来なくてはならない.ここらへんWindowと考え方が同じなんだなぁ.

LinuxのOSでダウンロードするffmpegが違います、またCPUによっても違うので、今回githubにアップしているDockerfileでは上手くいかない可能性もあります!、昨今ではCPUがAMDって人も多そうです.

そこら辺を合わして下記のコマンドを打つと実行されます.

docker-compose up -d --build

コンテナが起動したらコンテナ内から下記のコマンドを続けて打ってください.

python app.py

Srtファイルの変換には少々時間がかかりますが変換されます.なお、容量の大きいな音声データは恐らく落ちると思います.

では健闘を祈ってます.

https://github.com/taoka3/srt_convert

明日へ続く.

著者名  @taoka_toshiaki

※この記事は著者が40代前半に書いたものです.

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

タグ

AMD, CPU, d --build, docker-compose up, dockerfile, Docker環境, ffmpeg, ffmpeg-python, ffmpeg本体, github, Linux, python app.py, Srtファイル, whisper, お裾分け, コマンド, こんてな, そこら辺, らへんWindow, 健闘,

Photo by eberhard grossgasteiger on Pexels.com

英語学習用、サイトを構築中。基本自分用(お裾分け😌)

2022.08.05

Logging

おはようございます。今日はウォーキングしてきましたよ。自分が歩いているのは超早期です(笑

さて、自分用に英語学習用サイトを構築中です(現在進行形)。主に単語を覚えるためだけのサイトです、毎日数十単語の入力しています。1800単語まで数日はかかりそうですが全部、手動で入れます。因みに自分が学習しているのは中学生レベルです。中学生の英語を網羅するには1800単語を覚えないといけないらしいです。その作業が終わって自分が1800単語を覚えたら次は高校生で覚える単語も別途ページを構えて作ろうと思っています。

因みにサイトはシンプルで自分にとっては効率が良い作りを追求しようと思っていますので、あまりごちゃごちゃしたサイトにはしないで、必要最低限の作りのサイトで運用しようと思っています。その為、広告などは貼らないです。また、Topページ(358tool.com)では今後、いろいろなツールを作っていきますので、TOPページではそのリンクと概要を記載していきます。サービスは自分が欲しいと思ったものを中心に構築していきます、尚、広告を貼るサービスもありますので悪しからず!

では、今後とも宜しくお願い致します🙇。

著者名  @taoka_toshiaki

※この記事は著者が40代前半に書いたものです.

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

タグ

1800, 358, com, tool, TOP, いろいろ, ウォーキング, お裾分け, サイト, シンプル, ため, ツール, , ページ, レベル, 中学生, 今後, 今日, 作り, 作業, 入力, 全部, 別途, 効率, 単語, 基本, 学習, 広告, 必要, 手動, 数十, 数日, 早期, 最低限, 構築, , 毎日, , 現在, , 網羅, 自分, 英語, 追求, 進行形, 運用, 高校生,

Photo by Miguel Á. Padriñán on Pexels.com

一定の上限を超えたデータを削除するMYSQL文を作りました。

2022.07.26

Logging

おはようございます。今日は手続きに奔走してきます。

さて一定の上限を超えたデータを削除するMYSQL文を作りましたので、お裾分けです。下記のコードはidを降順にした上で、自動でnoを割り振ります。自動で割り振ったnoを元に条件件数を超えるデータは削除しております。なぜ、このようなMYSQL文を作ったかというと日付では判別出来ない削除データがあったからです。

DELETE T1 FROM test_tbl AS T1 
inner join (SELECT ROW_NUMBER() OVER(ORDER BY id DESC) AS rownum,id from test_tbl) AS T2
on T1.id = T2.id WHERE T2.rownum >= 4590;

この方法を使用するとサブクエリでいろいろな条件をしていた上でナンバーを割り振り削除することが出来ます。他にも方法はあると思いますが自分が思いついた、まぁある程度、処理の早い削除かと思います。是非、ご活用頂ければ幸いです。

著者名  @taoka_toshiaki

※この記事は著者が40代前半に書いたものです.

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

タグ

AS rownum, DELETE T, FROM test_tbl, gt, ID, id from test_tbl, inner join, MYSQL文, no, ORDER BY id DESC, over, SELECT ROW_NUMBER, お裾分け, サブクエリ, ナンバー, 一定, 上限, 日付, 条件件数, 降順,

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

※この記事は著者が40代前半に書いたものです.

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

タグ

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

githubの複数アカウントをWindowsで切り替えするbatファイルとexeファイルです。

2022.02.23

Logging

おはよう御座います。今日もあまり日中も気温が上がらないそうです😪。
フルリモートで働く人が多くなってきていますよね、そんな中、githubを仕事用と個人用と分けたい人が多いとかと思いますが、そんな人向けにツールを作りましたので紹介します。

GitHub Arctic Code Vault

githubの複数アカウントをWindowsで切り替えするbatファイルとexeファイルを作りましたので、お裾分けです、どこかのサイトにgithubのアカウントを切り替えるシェルスクリプトが記載していたのですが、自分はWindowsユーザーなのでそれ使えねぇーという事で作りました。

自分用なので、エラー取りはしていません、最低限の処理しか書いていないです。exeファイルの方はzipファイルにしてサーバに置いときます、尚、ご自身の良いような感じでgitdata.datファイルの中身を書き換えてください。考え方はbatファイルと同じです。

batファイルの方はこちらに記載しますので、ご自身でbatファイルを作成してください。尚、Windowsが開発環境になっていない、gitが環境変数に登録されていない場合は動きませんので悪しからず。必ず起動するときはコマンドからパラメーター投げて使ってください。

@echo off
if %1==main (
	git config --global user.name "example"
	git config --global user.email "mail@example.com"
)
if %1==sub (
	git config --global user.name "test"
	git config --global user.email "mail@test.com"
)
git config user.name
git config user.email

exeファイルの注意事項、PowerShellでもcmd.exeでも開けますが必ずgit-name.exeファイルが存在するディレクトリに移動してexeファイルをパラメーター付きで実行してください。

./git-name.exe main
main <==パラメーター
example <==githubのユーザー名
mail@example.com <==githubのメールアドレス

exeファイルのtoolはこちらからダウンロードしてください。
※尚、ウィルススキャン対象になった場合は対象から外してお使いください。

https://zip358.com/tool/git-name.zip

著者名  @taoka_toshiaki

※この記事は著者が40代前半に書いたものです.

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

タグ

Bat, dat, exe, gitdata, github, Windows, zip, アカウント, エラー, お裾分け, ご自身, サーバ, サイト, シェル, スクリプト, それ, ツール, どこか, ファイル, プル, ユーザー, リモート, , 中身, , , 今日, 仕事, 個人, 処理, 感じ, , 日中, 最低限, 気温, 紹介, 考え方, 自分, 複数, 記載,

LINE messaging apiでブログの配信通知するプログラムコード。

2021.07.14

Logging

暑い日が続いています、夕立になった後のアスファルトの匂いを嗅ぐと夏だなぁって思うのは自分だけでしょうか?
さてLINE messaging apiでブログの配信通知するプログラムコードを書きましたのでお裾分けします?、コードはいつもの通りコメントなんてものはありません。この2つのコードは何をしているのかだけ、解説しますね。

1つ目のコードは私のLINEチャンネルを友だち追加してくれたら、データベースにuseridを登録するコードです。解除したらuseridの削除もちゃんとしています。

2つ目のコードは私のLINEチャンネルに登録してくれた方々に最新の記事を送信しています。自分は毎日、9時に最新の記事を送信するようにcron登録しました。

一部、defineを設定している部分がありますのでコードに追加してください、よろしくお願いします?
※LINEチャンネル登録よろしくお願いします。

<?php
    class line{
        function webhook($webhook_object=null){
            if(!$webhook_object)return false;
            $obj = json_decode($webhook_object);
            $type = $obj->events[0]->type;
            $userId = $obj->events[0]->source->userId;
            $replyToken = $obj->events[0]->replyToken;
            if($type==="follow"){
                $pdo = self::db();
                if($pdo){
                    $sql = "insert into user (userid)values(:userid)";
                    $sth = $pdo->prepare($sql);
                    $sth->bindValue(":userid",$userId,PDO::PARAM_STR);
                    $sth->execute();
                }
            }
            if($type==="unfollow"){
                $pdo = self::db();
                if($pdo){
                    $sql = "delete from user where userid = :userid";
                    $sth = $pdo->prepare($sql);
                    $sth->bindValue(":userid",$userId,PDO::PARAM_STR);
                    $sth->execute();
                }
            }
            if($type==="message"){

            }
        }

        function db(){
            try {
                $pdo = new PDO(DSN,USERNAME,PASSWORD);
                return $pdo;
            } catch (\Throwable $th) {
                //throw $th;
                return false;
            }
        }
    }


    if($data = file_get_contents('php://input')){
       print line::webhook($data);
    }
<?php
    class blog_post_msg_line{

        function db(){
            try {
                //code...
                return new PDO(DSN,USERNAME,PASSWORD);
            } catch (\Throwable $th) {
                //throw $th;
                return false;
            }
        }

        function rss(){
            $obj = simplexml_load_file("https://zip358.com/feed");
            $post_message[2] = $obj->channel->item[0]->title ."\n". $obj->channel->item[0]->link;
            $post_message[1] = $obj->channel->item[1]->title ."\n". $obj->channel->item[1]->link;
            $post_message[0] = $obj->channel->item[2]->title ."\n". $obj->channel->item[2]->link;
            return $post_message;
        }

        function main(){
            $pdo = self::db();
            if($pdo){
                $post_message = self::rss();
                $sql = "select userid from user;";
                $sth = $pdo->query($sql);
                $res = $sth->fetchAll(PDO::FETCH_ASSOC);
                if($res){
                    foreach($res as $key=>$val){
                        $user_id = $val["userid"];
                        self::line_post($user_id,$post_message);
                    }
                }
                
            }
            
        }

        function line_post($user_id ='',$post_message=null){
            $text = [
                [
                    'type' => 'text',
                    'text' =>"最新の記事をお届けします"
                ],
                [
                'type' => 'text',
                'text' =>$post_message[0]
                ],
                [
                    'type' => 'text',
                    'text' =>$post_message[1]
                ],
                [
                    'type' => 'text',
                    'text' =>$post_message[2]
                ]                                
            ];
            
            $message = [
                'to' => $user_id,
                'messages' => $text
            ];
            
            $message = json_encode($message);
            
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: Bearer ' . ACCESS_TOKEN, 'Content-Type: application/json'));
            curl_setopt($ch, CURLOPT_URL, 'https://api.line.me/v2/bot/message/push');
            curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
            curl_setopt($ch, CURLOPT_POSTFIELDS, $message);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            $res = curl_exec($ch);
            curl_close($ch);      
        }
    }

    if($argv[0]){
        blog_post_msg_line::main();
    }  

著者名  @taoka_toshiaki

※この記事は著者が40代前半に書いたものです.

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

タグ

, 2, , API, cron, define, line, Messaging, userid, アスファルト, いつも, お裾分け, お願い, コード, コメント, チャンネル, データベース, ブログ, プログラム, もの, 一部, , 削除, 匂い, 友だち, , 夕立, , 方々, , 最新, 毎日, 登録, , 自分, 解説, 解除, 記事, 設定, 追加, 送信, 通り, 通知, 部分, 配信,

Twitterプロフィールからスパムみたいなアカウントかを機械学習で判定してみた。

2021.06.28

Logging

Twitterプロフィールからスパムみたいなアカウントかを機械学習で判定してみました。

機械学習にしてもらう①。

何故、このような事を考えたかはスパムみたいなアカウントってぱっと見で人は区別できるよねって思ったのでLobeというソフトを使って画像解析(機械学習)してモデルをエクスポートし、そのモデルをテンソルフローで使用して動作確認してみました。

機械学習にしてもらう②

結果は、まぁまぁの精度だったのでモデルをお裾分けしますね。因みにTwitterのプロフィール画像のスクリーンショットを行った時のソースコードも提供します。

尚、機械学習に使用したプロフィール画像は400枚ほど(少ない?)です、ok-image(一般人)とng-image(スパムみたいなアカウント)というラベルを付けて学習させてます。

model::https://zip358.com/ai-model/tw-profile/saved_model.pb (?モデルの中身はtensorboardでご確認を!)

zip358com
zip358
# Generated by Selenium IDE
import time
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager

from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.webdriver.support.ui import Select

class twss():
	def setup_method(self):
		self.driver = webdriver.Chrome(ChromeDriverManager().install())
		self.vars = {}

	def teardown_method(self):
		self.driver.quit()

	def screenshots(self):
		self.driver.get("https://twitter.com/")
		self.driver.set_window_size(945, 900)
		with open('twname.dat','r',encoding="utf-8") as f:
			for line in f:
				FILENAME = "X:\\var\\www\\html\\labo_ai\\twss\\image\\screen_" + line.replace('\n', '') +".png"
				self.driver.get("https://twitter.com/" + line.replace('\n', ''))
				time.sleep(2)
				self.driver.save_screenshot(FILENAME)
		f.close()
		self.driver.quit()
twss = twss()
twss.setup_method()
twss.screenshots()

著者名  @taoka_toshiaki

※この記事は著者が40代前半に書いたものです.

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

タグ

358, 400, ai-model, com, https, lobe, model, ng-image, ok-image, SA, tw-profile, Twitter, zip, アカウント, エクスポート, お裾分け, コード, ショット, スクリーン, スパム, ソース, ソフト, テンソル, フロー, プロフィール, モデル, ラベル, 一般人, , , 何故, 使用, 判定, 動作, 区別, 学習, 提供, , 機械, 画像, 確認, 精度, 結果, 解析,

ちょっとしたツール。

2020.05.11

Logging

サイト内の検索をするためのURLを生成してくれるツールを作りました。
ドメインを入力するとあらかじめ登録しているURLの候補が表示されます。
なお、プログラムでドキュメント検索する場合などに最適かなと思います、URLもプログラム関係のサイト(ドメイン)を登録しています。

因みにこれを作った経緯は単なる自分が使用するために作りました、そのお裾分けですので機能追加などは自分の判断で追加いたします(問い合わせなどは受け付けておりません)。

最後にリンクを貼っときます。
https://zip358.com/tool/site_search/ (サイト内検索URL生成)

著者名  @taoka_toshiaki

※この記事は著者が40代前半に書いたものです.

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

タグ

358, com, https, search, site, tool, url, zip, お裾分け, これ, サイト, ため, ツール, ドキュメント, ドメイン, プログラム, リンク, 使用, 候補, 入力, 判断, 問い合わせ, 場合, 最後, 最適, 検索, 機能, 生成, 登録, 経緯, 自分, 表示, 追加, 関係,

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

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

※この記事は著者が40代前半に書いたものです.

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, いま, お裾分け, カーソル, サービス, ソース, それぞれ, ダウンロード, ため, デモ, ファイル, ムフ, 下記, 地図, , 提供, 日本, 標準, 編集, 自分, , 都道府県, 雛形,

?Ponanza(ポナンザ)の作成者さんが作ったお天気のアレを真似たひとり用。

2020.02.22

Logging

Ponanza(ポナンザ)の作成者さんが作ったお天気のアレを真似たひとり使用?ものです。下記のものを作りました。開発者の場合、自分で作りたい衝動にかられると思います。まんまと駆られて作りました…なので考え方をお裾分けです。今までQiitaで公開したソースコードも必要になりますので、リンクを貼っときます。そしてメインのソースコードは下記になります( Twitterのoauthライブラリを呼び出しが必要になります。 )。

※個人の開発者様用なので位置情報は引っ張って来てません、天気の都道府県を変更されるか、Twitterの位置情報を使用し天気のAPIへ投げるなりしてください(本家はIP情報から位置情報を特定しようとしているようです)。乱暴な説明ですが駆け出しのプログラマーじゃない限りできると思います。

本家はこちら
https://note.com/issei_y/n/ne128a0cf27ca

追記:ソースコードをComposerで使用できるようにしました。
https://qiita.com/zip358com/items/8c1a128e24cc33ca7ca7

composer require zip358/tw_name_change
<?php
require_once ("vendor/autoload.php");
require_once ("moon.php");
require_once ("tenki.php");
use Abraham\TwitterOAuth\TwitterOAuth;
$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET);
$user_data=$connection->get("users/show",["screen_name"=>$user_screen_name]);
$name = $user_data->name;
date_default_timezone_set('Asia/Tokyo');
$icons = moon::$icon + tenki::$icon + array("@"=>"@");
$year = date("Y");
$mon = (int)date("m");
$day = (int)date("d");
$H = (int)date("H");
if($H>=6 and $H<=17){
    tenki::main();
    tenki::$url = "https://api.openweathermap.org/data/2.5/weather?id=".tenki::$ken->kochi["id"]."&appid=".tenki::$appid;
    tenki::api();
    $chg = tenki::$icon[str_replace("n","d",tenki::$response->weather[0]["icon"])];
}else{
    moon::main($year,$mon,$day);
    $chg = moon::icon();
}
foreach($icons as $key=>$val){
  if(preg_match("/$val/",$name)){
    $hit = $val;
  }
}
$name = str_replace("$hit",$chg,$name);
$connection->post("account/update_profile", ["name" =>$name]);

著者名  @taoka_toshiaki

※この記事は著者が40代前半に書いたものです.

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

タグ

0, 128, 27, API, ca, cf, com, https, IP, issei, ne, note, oauth, Ponanza, qiita, Twitter, アレ, お裾分け, コード, こちら, ソース, ひとり, ひとり用, プログラマー, ボナンザ, メイン, もの, ライブラリ, リンク, 下記, 位置, 作成者, 使用, 個人, 公開, 場合, 変更, 天気, 必要, 情報, 本家, 特定, 考え方, 自分, 衝動, 説明, 都道府県, 開発者, 限り, 駆け出し,

幸せの方程式

2018.07.15

Logging

あなたの「幸せ」は、周りの人次第:研究結果を読んで思ったこと

https://wired.jp/2016/06/22/happiness-equation/
この記事に付け足すとするならば、人を幸せにしないと幸せにはならない。
負も連鎖するし幸も連鎖するのかもしれないな。
人を不幸にして幸せを手に入れたとしても
いつの間にか、幸せは消えて負に変わるだと思います。
負の人を見つけたら、同情するのではなく
幸のお裾分けをした方が良いと思います。
幸せのお裾分けって何か?
簡単に言えば独りにしないことだと思います。
声掛けです。
最初は拒絶すると思います、それを根気強く
声掛けすることで変わっていきます。
 

著者名  @taoka_toshiaki

※この記事は著者が30代前半に書いたものです.

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

タグ

jp, あなた, お裾分け, 人次第, 周り, , , 方程式, 最初, 法則, 独り, 研究結果, 記事, ,