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;
  }
}

タグ

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

WPの記事を検索し一括カテゴリ変更する方法。

2020.05.25

Logging

WPの記事を検索し一括カテゴリ変更する方法は下記になります。ワードプレスのwp-load.phpを読み込み、下記のようなソースコードのファイルをcommandで実行すると、カテゴリが任意のカテゴリに変更されます。

重要点はwp_set_post_categoriesの引数です。arrayの配列の数値ですが、この数値をカテゴリIDのナンバーに変更することによってカテゴリが更新されます。

企業でご使用する場合はカテゴリ更新部分を一度、コメントアウトしCSVか何かでうまく記事が抽出できているか確認した後に、更新するようにお願い致します、当然ながら不具合等の苦情は受け付けません。自己責任でご使用くださいな。

尚、この下記のコードの意味がわからないという方は下記のURLからそれぞれのワードプレスようのメソッドが何を意味しているか調べてくださいね。
https://elearn.jp/wpman/

<?php
require_once(__DIR__ . '/../wp-load.php');
if ($argv[0]) {
    $args = array(
        'post_type ' => 'post',
        'posts_per_page' =>-1,
        's' => '映画'
    );
    $posts = get_posts($args);
    foreach ($posts as $val) {
        $href =  get_permalink($val->ID);
		$title = get_the_title($val->ID);
		$cnt++;
		echo $cnt.":".$title."\n".$href."\n";
		wp_set_post_categories($val->ID,array(1,2,3));
    }
}

タグ

-Command, 39, array, categories, CSV, DIR, ID, lt, once, php, POST, require, set, url, wp, wp-load, アウト, お願い, カテゴリ, コード, こと, コメント, ご使用, ソース, それぞれ, ナンバー, ファイル, プレス, メソッド, ワード, 一度, 一括, 下記, 不具合, 任意, 企業, , 何か, 使用, 場合, 変更, 実行, 引数, 当然, , 意味, 抽出, 数値, , 方法, 更新, 検索, 確認, 自己, 苦情, 記事, 責任, 部分, 配列, 重要点,

Visual Studio Codeの話とビデオ通話API。

2020.05.19

Logging

Visual Studio Code(ビジュアルスタジオコード)の話とビデオ通話APIをわかりやすく解説している動画を見つけたので紹介します。下記の動画を見ていただければビデオ通話APIの導入とVisual Studio Codeの使い方の基本が一通りわかるかなと、2017年の動画なので3年前(現在:2020年)の話になる。

これさえあれば大丈夫!Visual Studio Code 徹底解説! -HTML5 Conference 2017-

今では、Visual Studio codeにはいろいろな機能追加がされているが基本的な機能はほぼ同じ、機能追加されてこれ以上に使いやすさが増している部分もあるけど、上記の動画解説の内容を知っていない人は見るべしかなと思います。あと、ビデオ通話APIの話が割愛されているが、NTTが提供しているSkywayというAPIサービスがある、これを使用することにより簡単にビデオ通話が導入ができるみたいです。動画ではnode.jstypescriptで動かしている部分も垣間見える。あとAzureにデプロイする事も紹介しているので初心者向きの講義ではないかなと思いますが、見習いIT戦士が見るには良い講義かなと思えたのでご紹介しました。

見る限り、APIを使用すれば簡単にビデオ会議システムなどが導入できるなと言う印象を持ったものの、有料版はお高いなという感じがします。あのお値段を支払うのは結構きついなと思います。このAPI機能で無料のサービスなどを立ち上げる場合などはビデオ通話の時間に制限を設けないといけない気がします。

タグ

2017, 2020, , API, Az, Code, JS, node, NTT, Skyway, Studio, TypeScript, Visual, いろいろ, コード, こと, これ, サービス, スタジオ, ビジュアル, ビデオ, 上記, 下記, , , 使い方, 使用, 内容, 割愛, 動画, 垣間, 基本, 導入, 提供, 機能, 現在, 簡単, 紹介, 解説, , 追加, 通話, 部分,

いまこそ知りたいAIビジネスを読む。

2020.05.12

Logging

いまこそ知りたいAIビジネスを朗読してくれるiPhoneの純正ツールで3日ほどで最後まで読むことが出来た。

本の感想は下記のとおりです。
AIビジネスを取り組もうとしている人、もしくはこれからAIビジネスを取り入れようと下準備をしているひとの為に書かれた本という印象が強かった。なお、後半に書かれているMOOC(Massive open online course)という学習方法は興味深かった。日本版はないかと自分で調べて見た結果、日本版ではJMOOCというものがあり無料で学習することが出来るみたいだ、本書に書かれているMOOCに関しては無料もしくは低コストで学問を学べるという事を知りとても良いことを知ったと感じた。また、働き方改革のことにも触れられていた、働き方改革が表すると裏はAIなどの効率化というものが表一体であるという事を示されていてとてもなるほどなと思えた。

AIの導入するときに大切なことなども書かれているので、これから導入したいと考えられている方は手にとってみても良いかと思います。本書でも書かれているが、AI導入するとやはり、今までと違う仕事手順になることになるので従業員の理解がとても大事になるということを感じました。

タグ

, AI, course, iPhone, JMOOC, Massive, MOOC, online, open, いま, コスト, こと, これ, ツール, とおり, とき, ビジネス, ひと, もの, 一体, 下準備, 下記, , , 働き方, 効率, 印象, 大切, 学問, 学習, 導入, 後半, 感想, 改革, 方法, 日本, , 最後, 朗読, , 本書, , 無料, 純正, 結果, 自分, , ,

PHP7でTwigを使う。

2020.05.10

Logging

Twigとは小枝であり、PHPのテンプレートエンジンであります。テンプレートエンジンが何なのかはぐぐってください。ここでは割愛します。

Twig3.x(3系)、Dumpの表示の仕方が書かれていないのでそれを記載します。記載方法は下記になります。特に記載方法が変わったのはデバッグの時の記述方法です、最初、デバッグ方法をググっていたのですが、全然上手くいかずエラーばかりはいていました。※Twig2系の情報が結構ヒットします。

require_once '/vendor/autoload.php';
$loader = new \Twig\Loader\FilesystemLoader('テンプレートの階層を指定');
$twig = new \Twig\Environment($loader,['debug' => true]);
$twig->addExtension(new \Twig\Extension\DebugExtension());//?ここの記述を忘れずに!!
echo $twig->render('index.html(レンダーするテンプレートファイル)', ['items'=>$this->top_view()]);

結局、公式ページのドキュメントにデバッグ方法が書かれていたのですが、それにたどり着くまで、小一時間ぐらいWEBの荒野をさまよっていました。最初からドキュメントを見ろよという教訓を得たのですが、結構ググる方を優先してしまう自分がいます。実際はドキュメントの中で検索するのが一番なのかもなと。皆さんが使用するようなエンジンはドキュメントを見るほうが良いと今回、痛感しました。これからはドキュメントを見るようにします。

https://twig.symfony.com/doc/3.x/functions/dump.html

タグ

2, , 39, 7, addExtension, autoload, debug, dump, Environment, FilesystemLoader, gt, loader, new, once, php, require, true, Twig, vendor, エラー, エンジン, ここ, それ, デバッグ, テンプレート, ヒット, 下記, 仕方, , 割愛, 小枝, 情報, 指定, 方法, , 最初, 表示, 記載, 記述, 階層,

pip3がうまく動かない(´・ω・`)v

2020.04.30

Logging

pipがうまく動かないときの対応。下記の3点が入っていないとpython3をインストールしたとしてもpipが動かないそうだ。これが分かるまでに2時間を費やした時間を返してください(´・ω・`)v

yum install -y openssl-devel
yum install -y libffi-devel
yum install -y zlib-devel
https://www.youtube.com/watch?v=mVAQTrLLJzw

ちなみにPython3のインストールは下記のURLの説明を参考しました。ソースコードをビルドしインストールしている。こうすることでバージョンの使い分けができる。PHPは慣れたもので簡単に使い分けできるですけどね・・・。PythonはPythonは・・・。

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

最後にソースコードをビルドしてインストールしてpipを使用する場合、pip3で動かない場合はpip3.8とか試してみてくださいね。

コピペでWEBスクレイピングしてみた動画をUPしています。ちなみにpython 初心者vlogをアップして駄目駄目さ見せつけています。PHPはスイスイ?と出来るのですがPythonはズブの素人です。

徐々に上達するでしょう。

タグ

-y, 2, , 3.8, install, libffi-devel, openssl-devel, php, pip, Python, UP, url, , web, yum, zlib-devel, インストール, コード, こと, コピペ, これ, してい, スク, ソース, とき, バージョン, ビルド, ピング, もの, レイ, 下記, 使用, 動画, 参考, 場合, 対応, 時間, 最後, 簡単, 説明,

プログラム講師YOUTUBER、たにぐち まことさん。

2020.04.25

Logging

たにぐち まことさんという方がYOUTUBEでフロントエンドエンジニアやバックエンドエンジニアに対して有益な情報を公開しています。wordpressやvue.jsなどをわかりやすく解説しています。近々、kintoneの高知県講演(ライブ放送)で登壇される予定です。これからWEBのプログラマーやコーダーになりたい人は視聴して損はないと思います。自分が昔、HTMLなどを学んだときにはあまり本も買わずソースコード(HTMLコード)から勉強をしていましたが、いまはYOUTUBEという便利なツールがあるので、教育系YOUTUBERの動画を見て学習し手を動かして実践することにより短時間で学習することが出来ると思います。

Vue.js入門 #01: 一番最初のプログラム

自分がいまプログラミング初心者だったら、下記のようなプログラミング学習方法を取ると思います。YOUTUBEで教育系動画を視聴して動画で説明された物と同じ物を作成します。作成途中に分からない事があればググります、そして再度動画を観る。進まない時はSNSで質問をするなどを行いながら徐々に知識を身に着けていきます。知識がつくと基本を知ることが出来るので、次に違うプログラミング言語を学ぶ時の応用が付きます。尚、違う言語を学ぶときは以前まで使用していたプログラミング言語をいま勉強している言語で同じことを試してみるという事を行います。そうすることで比較的短時間で違う言語の勉強がスムーズになります。

理屈っぽい HTML5入門 #01:タグと HTML5と XHTMLの名残

最後にYOUTUBEチャンネル登録はこちら
たにぐち まことのともすたチャンネル
https://www.youtube.com/channel/UCphTq6mefx_15CjD35qgXgA

タグ

html, JS, kintone, vue, web, WordPress, youtube, YOUTUBER, いま, エンジニア, エンド, コーダー, コード, こと, これ, ソース, たにぐち, ツール, とき, バック, プログラマー, プログラミング, プログラム, フロント, まこと, ライブ, 下記, 予定, , , 作成, 便利, 公開, 初心者, 勉強, 動画, 学習, 実践, 情報, , , 放送, 教育, , 方法, , 有益, , , 登壇, 短時間, 自分, 視聴, 解説, 説明, 講師, 講演, 途中, 高知県,

Gさんのリアルタイム検索トレンドを抽出するPHPライブラリ

2020.04.15

Logging

Composerをインストールしていること前提条件として書いていきます。まずはライブラリーを入れます。

こんな感じに

composer require x-fran/g-trends

そして次にこんな感じのPHPコードを書きます、これだけでGさん(グーグルさん)のリアルタイム検索トレンドが表示することが可能となります。ちなみにJSONで返す処理として書いています。ライブラリーがしっかりしているので、あとはメソッドを呼び出すだけで簡単に検索のリアルタイムのトレンドが表示できてしまう。

ライブラリーコードは下記から参照できます。
https://github.com/x-fran/g-trends

<?php
include_once "../../vendor/autoload.php";
use XFran\GTrends\GTrends;
$options = [
    'hl' => 'ja-JP',
    'tz' => -540,
    'geo' => 'JP',
];
if((int)$_POST["p"]==1234){
    $gt =  new GTrends($options);
    $ret = $gt->getRealTimeSearchTrends();
    if(is_array($ret["storySummaries"]["trendingStories"])){
        $jsn = json_encode($ret["storySummaries"]["trendingStories"]);
        print $jsn;
    }
}

尚、ajaxで表示している部分は割愛します。
https://zip358.com/tool/demo14/ demo14を検証ください。

タグ

autoload, com, Composer, g-trends, github, GTrends, https, include, json, lt, once, options, php, quot, require, use, vendor, x-fran, XFran, あと, インストール, グーグル, コード, こと, これだけ, トレンド, メソッド, ライブラリ, ライブラリー, リアルタイム, 下記, 処理, 前提, 参照, 可能, 感じ, 抽出, 条件, 検索, 簡単, 表示,

経済減速とかで思うこと。

2020.04.02

Logging

経済減速とかで思うことは、早くもとの状態に戻って欲しい。東京オリンピックが延期になった途端、新型コロナの感染者数が跳ね上がりました。これが国のやることなのか?、新型コロナが終息すると対応の問題が浮き彫りになってくると思います。感染率や死者率などのお話は下記の動画を参照ください、わざわざこの人達が嘘を流しているようには自分は思えない。

新型コロナウイルスについて専門家に質問しました(前編)
新型コロナウイルスについて専門家に質問しました(後編)

確かにまだ治す薬もないので、怖いとは思いますが極端な自粛ムードは飲食業界などには多大な影響を及ぼしていると思います。そしてホリエモンが先日上げた動画が意味していることも事実かなと。

もう疲れたので今後一切イベントやりません

攻撃的な少数の行動するひとが世の中にはいます。そういう人が世の中を窮屈しています。そして最終的に馬鹿らしくなるのです。

タグ

-IyxT, 4, 8, com, https, jrsb, watch, www, youtube, オリンピック, お話, こと, これ, コロナ, ひと, ホリエモン, ムード, もと, 下記, , , 事実, , 先日, 動画, 参照, 問題, , , 多大, 対応, 少数, 延期, 影響, 意味, 感染, 感染者, 新型, 東京, 業界, 極端, 死者, 浮き彫り, 減速, 状態, 窮屈, 終息, 経済, 自分, 自粛, , 行動, 途端, 飲食,

倹者{ケンジャ}の流儀というYOUTUBER

2020.03.21

Logging

倹者の流儀というYOUTUBERさんが言っていることは金銭的に的を得た話を言っていると思います。下記の動画にもあるように100万円貯めると「こころ」に余裕が出てきます。ちなみに無職な自分も100万円はあったりするか、どうかはご想像におまかせしますね。ちなみに2020年の1月に引き落とされた60万円後も一応、節制しているというか、高額な商品を買うこともないので生きて行けてます。

貯金100万円するだけで人生変わります。

お金の貯まらない理由の一番はお金が貯まらない構造を作っているからだと思います。月々差し控えれるお金の見直しが必要だったり彼が言っているように固定費見直す必要があります。ちなみに自分が思うには本当にお金が貯まらない人は構造を見直す必要があります。自分がそうだったように無駄遣いという構造を見直す必要があります。例えば見ないのにネットフリックスを契約しているとか、そういうサブスクリプション(サブスク)が多かったら年間にすると無駄遣いにあたります。そんな感じでお金の無駄を見直すだけでかなり変わります。いまは収益はないのですが、月々の引き落としは最低限に抑えられています。

最後に倹者の流儀YOUTUBERのチャンネル登録はこちらになります。
https://www.youtube.com/channel/UCdoqNcqLb6b1qPzZW8wAIbg

タグ

, 100, 2020, 60, YOUTUBER, おまかせ, お金, ケンジャ, こころ, こと, ご想像, サブ, サブスクリプション, スク, ネットフリックス, , , 下記, , 余裕, 動画, 商品, 固定, 契約, 年間, , 必要, 感じ, 月々, 本当, 構造, 流儀, 無職, 無駄遣い, 理由, , 節制, 自分, , 高額,

ブラウザのプッシュ通知が簡単にできちゃう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

ではでは?健闘を祈る?

タグ

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

市場動かすアルゴリズムのある意味、暴走か?

2020.03.13

Logging

コロナショックでボヤいている人も多いかと思いますが、なんか自分はいまの市場になんか変だなと思っているタイプです。これで儲けている人がいるだろうなと。これが本来の価値なのか?今まで高騰していただけなのか?素人ではわからないのですが、アルゴリズム観点から見ると明らかに市場動かすアルゴリズムの暴走ではないかと思っています。下記の動画にもあるように市場の大半はアルゴリズムによって動いている。売買する手前のアルゴリズムはニュースの記事などから経済を判断しているわけで、悪いことを書けばアルゴリズムはそれをマイナスと判断して売りに出る。

市場動かすアルゴリズムとは?(スグ効く解説55)

市場を動かしているアルゴリズムが全て賢くないので、下げはまだまだ続くと思います。そして今回のコロナショックで市場に導入できるアルゴリズムの判断基準ができることを祈っています。じぶんは明らかにいまの市場は異常だと思っています。インフルエンザレベルの致死率でここまで市場が混乱しているのは、とても変だなと、そして各国大騒ぎしている。本当にこれパンデミックなのかと・・・。例えばエボラウイルスみたいなのが伝染していった訳でもないのだからね、ちょっと変だと。

10/6公開『チューリップ・フィーバー 肖像画に秘めた愛』予告編

皆さん、チューリップフィーバーでも見て一息してください(泣)

タグ

アルゴリズム, いま, インフルエンザ, ここ, こと, これ, コロナ, じぶん, ショック, それ, タイプ, ニュース, レベル, わけ, 下記, , 今回, 価値, 全て, 判断, 動画, 基準, 売り, 売買, , 大半, 導入, 市場, 意味, 手前, 暴走, 本来, 混乱, 異常, 素人, 経済, 自分, 致死率, 観点, 記事, 高騰,

jqueryのイベント処理時に引数を受け渡す方法を知っとくと良いかもしれません。

2020.03.10

Logging

jqueryのイベント処理時に引数を受け渡す方法を知っとくと良いかもしれません。記述は下記になります。ぐぐると出てくるので知っている人の方が多いかもしれませんが…。ちなみに自分はこの記述方法、ごくまれにしか使わないため、忘れてしまいます。event.dataに紐づけてくれるのはとても良いかなと自分は思っていますが、皆さんはいかがでしょうか?もうjqueryなんか使わないよという方もいると思うのですが、自分が思うにゴリゴリ書くよりか、jqueryで済ませれるところは使ったほうがコードは短くて済むと思っています。WEB業界は技術の移り変わりが早いですよね。逆にソフトのほうはWEBよりはスパンが長い気がします。

https://zip358.com/tool/demo9/

<!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>
    <p id="pen">お腹空いた(´;ω;`)お腹空いたと>φ(..)</p>
</body>
</html>
$(function(){
    $("#pen").click({sword:"The pen is mightier than the sword"},function(e){
        $(this).text(e.data.sword);
    });
    // $("#pen").on("click",{sword:"The pen is mightier than the sword"},function(e){
    //     $(this).text(e.data.sword);
    // });
});

タグ

charset, data, DOCTYPE, EVENT, gt, head, html, ja, jquery, lang, lt, meta, quot, web, いかが, イベント, かな, コード, スパン, ソフト, ため, ところ, 下記, , 処理, 引数, 技術, , 方法, 業界, , 皆さん, , 自分, 記述, ,

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

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');
                });
        }
    });
}

タグ

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

最新版のipadじゃなくてもマルチタスク出来るよ。

2020.03.02

Logging

最新版のipadじゃなくてもマルチタスク出来るよ。知っているひとの方が多いと思いますが、そうなんです。マルチタスク出来るですよ、比較的に新しいipadでは!!。実際、自分のipadでマルチタスクの操作をしてみました。触ってみて自分、マルチタスクで何かすることがないなという印象です。でも本を読みながらTwitterはありかなと思います。

ipadを持っている方はマルチタスクを試しに出来るかどうか、やってみるのも良いかもしれません。ちなみに操作動画は下記になりますので、参考にしてみてくださいね(Apple公式のマルチタスクの使い方の操作方法です)。

iPadのマルチタスク機能の使い方 — Appleサポート

タグ

apple, iPad, Twitter, こと, タスク, はあり, ひと, マルチ, 下記, 使い方, 公式, 動画, 印象, 参考, 実際, 操作, , 方法, 最新版, , 自分,

今より未来が好きですね。

2020.03.01

Logging

今より未来が好きですね。
未来は変わる未来は良くなると思って生きていくと本当に
良くなるだってさ。まぁそうだよなと思ってないと面白くないしょ!
まぁ下記の歌詞にあるように自分は『明日が大好き』なんですよ。
だから希望を思って生きていけば良いことあるですよ。
それが早いか遅いかわからないですがね。良いことも見えていないなら
それは心が疲れているです。情報社会で生きていると心が疲れてくる。
そこらさっと抜け出す方法を手にすることは大事です。
『それでもいいや』という考え方は大事だと思います、受けとめるのに時間のかかることも世の中には有るですけどね。

Mrs. GREEN APPLE – 春愁

タグ

, 5, Ci-, com, https, lr-DA, watch, www, youtube, こと, しょ, そこら, それ, 下記, , , , 大事, 希望, , 情報, , 方法, 明日, 時間, 未来, 本当, 歌詞, 社会, 考え方, 自分,

どうする?どうする?どうしたい?

2020.02.29

Logging

どうする?どうする?どうしたい?と自問自答することは大事なことかなと思います。ちなみに人生、本当にどうなるかわからないですって事を言いたい。将来を描いた通りにはならないことが多いけれども挑戦するということは大事です。
言いたいことは下記の動画を見たらわかると思います。自己啓発的ですが、、、。

【人生が変わらない人の3つの特徴】#ASKME1000 VOL30
「お前は何がしたい」【5分で人生が変わる26歳経営者の感動スピーチ】#ASKME1000 VOL10(字幕付き)

タグ

-v, , 2, 4, com, duv, https, UC, watch, www, youtube, こと, 下記, , 人生, 動画, 大事, 将来, 挑戦, 本当, 自問自答, 自己, 通り,

phpのPDOでバインドする時、こうすれば楽。

2020.02.28

Logging

phpのPDOでバインドする時、こうすれば楽ですよね(・(ェ)・)という記述です。前の職場ではsqliでDB接続していたのですが、バインドして作られていたかは忘れてしまいました。ちなみに前の職場のPDOに改修するのは面倒くさいだろうなと感じます。何がめんどくさいかと言えば、今まで導入していたもの全てに対応するというのは、超面倒くさいと思います。

余談:
前の職場を何故辞めたかのお話します。突発的に辞めたと思う人もいるかもしれませんが、基本的に突発的辞めることはないです。突発的に辞めたかのように見えて前々から考えてきっかけを理由に辞めました。具体的な理由に関してはここでは書きません。突発的に辞めたかのように見せかけて計画的です(・(ェ)・)


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

<?php
ini_set("display_errors",1);
class mysql {
    static $dbh = Null;
    static $host = "localhost";
    static $id = "あいーでぃー";
    static $pass= "パスワード";
    static $dbname = "test";
    static $sql = array(
        "id"=>array("data"=>PDO::PARAM_INT,"val"=>""),
        "name"=>array("data"=>PDO::PARAM_STR,"val"=>"")
    );
    static function connect()
    {
        /* 接続状況をチェックします */
        try {
            static::$dbh = new PDO('mysql:host='.static::$host.';dbname='.static::$dbname.';', static::$id, static::$pass);
            static::$dbh->query('SET NAMES utf8');
          } catch (Exception $e) {
            echo "Failed: " . $e->getMessage();
          }
    }
    static function insert_query(){
        //プリペアドステートメント
        $stmt = static::$dbh->prepare("insert into test1 (id,Name) values(:id,:name);");
        //バインド
        foreach(static::$sql as $key=>&$val){
            $stmt->bindParam(":$key",$val["val"],$val["data"]);
        }
        $stmt->execute();
        $stmt = null;
     }
     static function update_query(){
        //プリペアドステートメント
        $stmt = static::$dbh->prepare("update test1 set Name= :name where id = :id;");
        //バインド
        foreach(static::$sql as $key=>&$val){
            $stmt->bindParam(":$key",$val["val"],$val["data"]);
        }
        $stmt->execute();
        $stmt = null;
     }
     static function select_query(){
        //プリペアドステートメント
        $stmt = static::$dbh->prepare("select * from test1 where id = :id;");
        //バインド
        foreach(static::$sql as $key=>&$val){
            if($key==="id")$stmt->bindParam(":$key",$val["val"],$val["data"]);
        }
        $stmt->execute();
        while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
            printf ("%d (%s)<br>", $row["id"], $row["Name"]);
        }
        $stmt = null;
     }
    static function close(){
        static::$dbh = null;
    }
}
mysql::connect();
// for($i = 0 ;$i<=99;$i++){
//     mysql::$sql["id"]["val"] = $i;
//     mysql::$sql["name"]["val"] = "テスト$i";
//     mysql::insert_query();
// }
for($i = 0 ;$i<=99;$i++){
    mysql::$sql["id"]["val"] = $i;
    mysql::$sql["name"]["val"] = "テスト<font color='red'>$i</font>";
    mysql::update_query();
}
for($i = 0 ;$i<=99;$i++){
    mysql::$sql["id"]["val"] = $i;
    mysql::select_query();
}
mysql::close();

タグ

, class, db, dbh, display, errors, ini, lt, MYSQL, PDO, php, quot, set, sqli, static, お話, きっかけ, コード, ここ, こと, ソース, バインド, もの, 下記, , , 余談, 全て, , 前々, 対応, 導入, 接続, 改修, , 理由, 職場, 記述,

何故、赤の他人にそんなにも敵対心や好意を抱いているのかと思うこの頃。

2020.02.26

Logging

今日の朝というか、朝方?
寝れなかったのでスマホでTWITTERアプリを開くとこんなの事が書かれていた(下記参照)。書いた本人は常識的な意見という事で指摘したのだろう。それに対して意見が大量についたみたいだけど、箕輪厚介氏と関係ある人はどれぐらいいるだろうかと思ったわけです。自分は基本的に名指しで批判はしないし、批判する場合は名前を伏せて時系列でツイートするけど(それは良いとして)。ふと思ったのは自身、箕輪厚介氏に限らずTVなどの有名人に親近感も持ち合わせていない。

メディアに出ている人は、これからの社会の常識を変える側の人間なのだとは思います。そういう人は率先してこうやって発信しているでしょう。その中で社会に受け入れられるものもあればそうではない物もある。たぶん、会議中にスマホにメモ取るのはIT業界ではOKになり、殆どの事務系はOKになるだろうと思います。音声録音機能と音声を文字変換するアプリもありますからね。効率的に議事録取れる可能性が高いです、そしてそうやって常識が崩れていくと思います。

常識を変えたくなければ絡まないことだと思うです、議論の場を与えなければ物事は変わらない。

余談1:
庶民がSNSを持つことにより、今まで声を上げれなかったひとが声を上げれるようになった事は良いことだと思いますが、逆に庶民は操れている感覚があります。それはTVよりもインターネットの方が操りやすいかなと思いますし、SNSのビックデータと人工知能の解析で民衆はかなりの確率で、もうこの日本でも民衆は操り人形化していると思います。

そしてこの頃思った事は賢い人間もいれば、そうではない人もいる。そうではない人たちは結構メディアを鵜呑みする傾向が強い。実際、事実は体験したひとの中にしか無いので、ある時から自分はメディアはあまり信じていない。特にひとの発信するものは感情がついて回る。ときには感情で法律が変わったりもする、それは恐ろしいことだと思います。

余談2:
賢く良識的な人間が考え出した結果に従いますか、それとも低能な人間が考え出した結果に従いますかと質問すると大体の人は賢い人間が考え出した結果に従うと答えると思いますが、日本国は民主主義なので選挙の票は同じ1票で重み付けはありません。本当にコレで良い世の中になるのかと…。

※余談2はある本で読んだ言葉を自分の言葉に置き換えて書きました。

タグ

IT, OK, TV, Twitter, アプリ, ありま, これ, スマホ, それ, ツイート, どれぐらい, メディア, メモ, もの, わけ, 下記, , , 事務, , 人間, 今日, 他人, 会議, , 厚介, 参照, 名前, 場合, 変換, 大量, 好意, 常識, 意見, 批判, 指摘, 敵対心, 文字, 時系列, 有名人, , 朝方, 本人, 業界, 機能, 殆ど, , 率先, 発信, 社会, 箕輪, 自分, 自身, 親近感, , 録音, 関係, 音声, ,

?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]);

タグ

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

もし仕事が見つからなかったらコレしか自分無いなと感じます。

2020.02.22

Logging

下記の動画ようなそんな生き方に。自分はそういう事が嫌いじゃないので、それで生きていきたい。そしてここでは言えないが事情があり、そういう生き方のほうが精神的に生きやすいと思うのだが、フリーランスという道はそんなに甘いものではないのは理解しているつもりで書いてます。今は職につく事を考えているのですが、やはり毎日、精神疲労がひとと違っていつも大変なのですね、ここ数年、仕事に務めてきたけど結構つらい、特に冬場の夕方あたりが精神的に重くなるので辛いのだ。

個人開発で複数のスキルを得るためにやったこと 〜 アプリ開発の企画やプログラミングからデザイン、マネタイズまで全部自分でやれるようになるには?

真面目に働くひとなので、今こういう体調になってしまったのだろうかと…思う。まぁでも体調や心が重くなる意外は基本的に普通なのだけど、これだけは後遺症みたいに何だか残ってしまったようです。なので、もしフリーランスになったとしたら、一番はこういう生き方を望みます。たぶん、自分が頑張ればこういう生き方を望めそうな気もします。自分の場合、収入が25万円あれば生きていけそうなので働き口がなかったら、そこらへんを目指していこうと思います。

トイウコトで動画の感想でした?今は自分でも働けそうな働き口を探すこととかに専念しています。なので労働しながら上記のような仕事へシフトしていくことも有りだなと思えました。

タグ

25, ここ, コレ, これだけ, それ, つもり, ひと, フリー, もの, ランス, , , 下記, , 事情, , 仕事, 体調, 冬場, 動画, 収入, 場合, 夕方, 大変, 嫌い, 後遺症, , 意外, , 普通, 毎日, , 理解, 生き方, 疲労, 真面目, 精神, , 自分, ,

天気予報を取得するアレを使用してみた(Openweathermap_api)。

2020.02.19

Logging

ご自由にお使いください。尚、openweathermap.orgより
アカウントを作成後、APIKEYを取得しお使いください。
下記のソースコードをコピーしての可変等は可能です。

余談

天気予報の絵文字が合致していていないかもしれません。
また都道府県のIDもズレている場合、お好みで変更ください。
ZIPコードで情報を取得するとより正確な天気予報となるそうです。

下記のコードを実行するとこんな感じになります。

ソースコードはこんな感じになります。

<?php
class Openweathermap_api{
    public $url = "https://api.openweathermap.org/data/2.5/weather?id=";
    public $appid = "apikey";
    public $ken ="";
    public $response ="";
    public $icon = array(
        "01d"=>"?",
        "02d"=>"?",
        "03d"=>"?",
        "04d"=>"?",//?
        "09d"=>"?",
        "010d"=>"?",
        "011d"=>"?",
        "013d"=>"?",
        "050d"=>"?",
    );
    function __construct()
    {
        $this->ken = (object)(json_decode(@file_get_contents("ken.json"),true));
    }
    function api(){
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $this->url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        $this->response =  (object)json_decode(curl_exec($ch),true);
        curl_close($ch);
    }
}
$tenki = New Openweathermap_api();
$tenki->url = "https://api.openweathermap.org/data/2.5/weather?id=".$tenki->ken->kochi["id"]."&appid=".$tenki->appid;
$tenki->api();
print($tenki->icon[str_replace("n","d",$tenki->response->weather[0]["icon"])]);
var_dump($tenki->response);
{
    "hokkaido": {
        "id": "2130037",
        "kenmei": "北海道",
        "kenfurigana": "ほっかいどう"
    },
    "aomori": {
        "id": "2130656",
        "kenmei": "青森県",
        "kenfurigana": "あおもり"
    },
    "iwate": {
        "id": "2112518",
        "kenmei": "岩手県",
        "kenfurigana": "いわて"
    },
    "miyagi": {
        "id": "2111888",
        "kenmei": "宮城県",
        "kenfurigana": "みやぎ"
    },
    "akita": {
        "id": "2113124",
        "kenmei": "秋田県",
        "kenfurigana": "あきた"
    },
    "yamagata": {
        "id": "2110554",
        "kenmei": "山形県",
        "kenfurigana": "やまがた"
    },
    "fukushima": {
        "id": "2112923",
        "kenmei": "福島県",
        "kenfurigana": "ふくしま"
    },
    "ibaraki": {
        "id": "2112669",
        "kenmei": "茨城県",
        "kenfurigana": "いばらき"
    },
    "tochigi": {
        "id": "1850310",
        "kenmei": "栃木県",
        "kenfurigana": "とちぎ"
    },
    "gunma": {
        "id": "1863501",
        "kenmei": "群馬県",
        "kenfurigana": "ぐんま"
    },
    "saitama": {
        "id": "1853226",
        "kenmei": "埼玉県",
        "kenfurigana": "さいたま"
    },
    "chiba": {
        "id": "2113014",
        "kenmei": "千葉県",
        "kenfurigana": "ちば"
    },
    "tokyo": {
        "id": "1850144",
        "kenmei": "東京都",
        "kenfurigana": "とうきょう"
    },
    "kanagawa": {
        "id": "1860291",
        "kenmei": "神奈川県",
        "kenfurigana": "かながわ"
    },
    "niigata": {
        "id": "1855429",
        "kenmei": "新潟県",
        "kenfurigana": "にいがた"
    },
    "toyama": {
        "id": "1849872",
        "kenmei": "富山県",
        "kenfurigana": "とやま"
    },
    "ishikawa": {
        "id": "1861387",
        "kenmei": "石川県",
        "kenfurigana": "いしかわ"
    },
    "fukui": {
        "id": "1863983",
        "kenmei": "福井県",
        "kenfurigana": "ふくい"
    },
    "yamanashi": {
        "id": "1848649",
        "kenmei": "山梨県",
        "kenfurigana": "やまなし"
    },
    "nagano": {
        "id": "1856210",
        "kenmei": "長野県",
        "kenfurigana": "ながの"
    },
    "gifu": {
        "id": "1863640",
        "kenmei": "岐阜県",
        "kenfurigana": "ぎふ"
    },
    "shizuoka": {
        "id": "1851715",
        "kenmei": "静岡県",
        "kenfurigana": "しずおか"
    },
    "aichi": {
        "id": "1865694",
        "kenmei": "愛知県",
        "kenfurigana": "あいち"
    },
    "mie": {
        "id": "1857352",
        "kenmei": "三重県",
        "kenfurigana": "みえ"
    },
    "shiga": {
        "id": "1852553",
        "kenmei": "滋賀県",
        "kenfurigana": "しが"
    },
    "kyoto": {
        "id": "1857907",
        "kenmei": "京都府",
        "kenfurigana": "きょうと"
    },
    "osaka": {
        "id": "1853909",
        "kenmei": "大阪府",
        "kenfurigana": "おおさか"
    },
    "hyogo": {
        "id": "1862047",
        "kenmei": "兵庫県",
        "kenfurigana": "ひょうご"
    },
    "nara": {
        "id": "1855608",
        "kenmei": "奈良県",
        "kenfurigana": "なら"
    },
    "wakayama": {
        "id": "1848938",
        "kenmei": "和歌山県",
        "kenfurigana": "わかやま"
    },
    "tottori": {
        "id": "1849890",
        "kenmei": "鳥取県",
        "kenfurigana": "とっとり"
    },
    "shimane": {
        "id": "1852442",
        "kenmei": "島根県",
        "kenfurigana": "しまね"
    },
    "okayama": {
        "id": "1854381",
        "kenmei": "岡山県",
        "kenfurigana": "おかやま"
    },
    "hiroshima": {
        "id": "1862413",
        "kenmei": "広島県",
        "kenfurigana": "ひろしま"
    },
    "yamaguchi": {
        "id": "1848681",
        "kenmei": "山口県",
        "kenfurigana": "やまぐち"
    },
    "tokushima": {
        "id": "1850157",
        "kenmei": "徳島県",
        "kenfurigana": "とくしま"
    },
    "kagawa": {
        "id": "1860834",
        "kenmei": "香川県",
        "kenfurigana": "かがわ"
    },
    "ehime": {
        "id": "1864226",
        "kenmei": "愛媛県",
        "kenfurigana": "えひめ"
    },
    "kochi": {
        "id": "1859133",
        "kenmei": "高知県",
        "kenfurigana": "こうち"
    },
    "fukuoka": {
        "id": "1863958",
        "kenmei": "福岡県",
        "kenfurigana": "ふくおか"
    },
    "saga": {
        "id": "1853303",
        "kenmei": "佐賀県",
        "kenfurigana": "さが"
    },
    "nagasaki": {
        "id": "1856156",
        "kenmei": "長崎県",
        "kenfurigana": "ながさき"
    },
    "kumamoto": {
        "id": "1858419",
        "kenmei": "熊本県",
        "kenfurigana": "くまもと"
    },
    "oita": {
        "id": "1854484",
        "kenmei": "大分県",
        "kenfurigana": "おおいた"
    },
    "miyazaki": {
        "id": "1856710",
        "kenmei": "宮崎県",
        "kenfurigana": "みやざき"
    },
    "kagoshima": {
        "id": "1860825",
        "kenmei": "鹿児島県",
        "kenfurigana": "かごしま"
    },
    "okinawa": {
        "id": "1854345",
        "kenmei": "沖縄県",
        "kenfurigana": "おきなわ"
    }
}

タグ

2.5, API, APIKEY, appid, class, data, ID, lt, Openweathermap, org, php, pub, public, quot, url, weather, zip, アカウント, アレ, お好み, コード, コピー, ご自由, ズレ, ソース, 下記, 予報, 余談, 作成, 使用, 取得, 可能, 合致, 場合, 変更, 天気, 実行, 情報, 感じ, 正確, 絵文字, 都道府県,

漫画家もYOUTUBERしている。

2020.02.12

Logging

漫画家もYOUTUBERしている。下記の動画を観てプロフェッショナルってどういう事なのかが、ヒシヒシと伝わってきます。恐らくプロとアマの違いは妥協するハードルの設定が違う。要するに技術的なところが圧倒的に違うということ。そこがプロとアマの境目なんだろうと動画を観て思いました。

そして自分の動画やブログを読み返したり見返したりする事があるのですが、甘々なアマから抜け出せないのは、そこらへんのクオリティに拘るとかそういう所なのかもしれないなと思います。有名なひとはクオリティがあまり無くても視聴者はつきます、特に芸能人とかはそんな感じですね。

自分みたいな無名な素人はクオリティが無いと再生回数やブログのプレビュー数は跳ねないなとつくづく思います。いきなりクオリティが良くなるわけではないのでやはり日々、精進していくしかないと思います。ちなみに今日からYOUTUBE動画、実の声で配信することにしました。実の声は嫌いなのですが動画を見直すと少しうるさく感じるので変えてます。あとは解説をもっと上手にしたいのですが、コレばかりは慣れかなと思います。大量に解説すれば何れ上達すると思っています。無編集の状態でUPしているのですがなんか加工した方が良いのかなと思っていますが解説動画なので悩ましい限りです。

漫画原稿1枚 下絵・ペン入れできるまで 全収録

最後に漫画家さんのYOUTUBEチャンネルのリンクを貼っときます。 https://www.youtube.com/channel/UCeySBnV71dyC-gwqapq9NwQ

タグ

youtube, YOUTUBER, アマ, クオリティ, こと, そこ, そこら, ところ, ハードル, ひと, プレビュー, プロ, ブログ, プロフェッショナル, べん, わけ, 下記, , 今日, 再生, 動画, 回数, 境目, , 妥協, 嫌い, 少し, 感じ, , 日々, 有名, 漫画家, 無名, 甘々, 精進, 素人, 自分, 芸能人, 視聴者, 設定, 違い, 配信,

モノ作りYOUTUBERのミニチュア作りが凄いオイラは無理、。

2020.02.02

Logging

モノ作りYOUTUBERのミニチュア作りが凄いオイラは無理ですね…。かなり不器用なのでこういう細かい作業が出来る人は凄いなと思います。0からのオリジナルミニチュア作りは唯ただ、感心するばかりです(汗)。こんな事が出来る人は楽しいだろうな。そしてこれを作って喜んでもらえる人がいるのだから、良いなぁと思います。こういうニッチなYOUTUBER(ユーチューバー)さんは競合相手が少なそうです。

DIY☺︎miniature station at Sea diorama キャンディの棒で海に駅をつくりました。

そしてHanabira工房(はなびら工房)さんが作っているオリジナルミニチュアは精巧かつリアルです、リアルというか本当に動くものまであるですよ!!!
これは凄いなと下記の動画を見ていただけると分かる通り、『台所のプロペラ換気扇』を1/16サイズが実際に動いてます。スゴ!!まさにプロ職人です。

DIY☺︎miniature Realistic kitchen fan /ミニチュア『台所のプロペラ換気扇』を1/16サイズで作ってみた!

最後に Hanabira工房さんのチャンネル登録はこちらになります。
https://www.youtube.com/channel/UCyyp7X9QBvJh6mIoQYJmUuA

タグ

0, , 16, Hanabira, youtube, YOUTUBER, おいら, オリジナル, かなり, こちら, これ, サイズ, チャンネル, ニッチ, はなびら, プロ, プロペラ, ミニチュア, もの, ユーチューバー, リアル, 下記, 不器用, , , 作業, 動画, 台所, 実際, 工房, 感心, 換気扇, 最後, 本当, , 無理, 登録, 相手, 競合, 精巧, 職人, 通り,