Windows10に標準でOpenSSH
2019/10/28 Mon 10:26:06 [edit]
最近、DellのT100サーバにVirtualBoxって云うソフトをインストールしたんスよね。要はコンピュータの中に仮想のコンピュータを仕立てるソフトなんスよ。
で、Fedora28って云うLinuxマシンを仮想コンピュータとして起動したのが上の図っすよ。旧態依然としたモノクロのキャラクターベースのログイン画面なんスけど、皆さんが普通にアクセスしてるサイトのウェブサーバも大体こんな感じっスからね。
で、このサーバにアクセスして操作をするソフトをターミナルソフトって云うんだが、オイラは大体Tera Termと云うのを使ってたんだが、Windows10にも標準でOpenSSHって云うのが付いてくるようになったんで、OpenSSHクライアントソフトを使ってみたんスよ。 使い方は何のことはない。[スタートメニュー]→[Windows システム ツール]→[コマンドプロンプト]を選択すると上のような画面が出てくる。
上の図は"C:\Users\user>"ってなってるんだが、PCにログオンしてるユーザー毎に"user"の部分は変わるんで、読み替えてみてね。上の図では何をやってるかと云うと…

で、Fedora28って云うLinuxマシンを仮想コンピュータとして起動したのが上の図っすよ。旧態依然としたモノクロのキャラクターベースのログイン画面なんスけど、皆さんが普通にアクセスしてるサイトのウェブサーバも大体こんな感じっスからね。
で、このサーバにアクセスして操作をするソフトをターミナルソフトって云うんだが、オイラは大体Tera Termと云うのを使ってたんだが、Windows10にも標準でOpenSSHって云うのが付いてくるようになったんで、OpenSSHクライアントソフトを使ってみたんスよ。 使い方は何のことはない。[スタートメニュー]→[Windows システム ツール]→[コマンドプロンプト]を選択すると上のような画面が出てくる。
上の図は"C:\Users\user>"ってなってるんだが、PCにログオンしてるユーザー毎に"user"の部分は変わるんで、読み替えてみてね。上の図では何をやってるかと云うと…
- カレントフォルダ直下に.sshって云うファイルもフォルダがないのを確かめ…
- sshコマンドで、sunao-laboと云うユーザーでホスト192.168.11.11のPCにログインしようとする
- 「ホントに接続を続けてもいいの?」って尋ねてくるので"yes"
- パスワードを入力すると…ログイン出来たっと!
- exitでログアウトして…
- カレントフォルダ直下に.sshって云うフォルダが出来て、その中にknown_hostsって云うファイルが出来てた。
- typeコマンドでknown_hostsの内容を見たらこんな感じだった

スポンサーサイト
YoutubeのAPI その1:ユーザーIDからチャンネルIDを取得する
2018/02/06 Tue 13:05:34 [edit]
「Web APIとは何ぞや?」ってぇ難しい話は、この語句のリンク先にまかせるとして、YoutubeでもFacebookでも或いは楽天でもこのWeb APIで成り立ってると云っても過言ではないくらい、インターネット技術の中枢的な存在っすね。コイツのおかげでオイラは飯を食わせてもらってるようなもんです。
オイラが関わってる海外ドラマのサイトは、放送局が持っているFacebookサイトのウォール情報をFacebookのAPIで、放送局のアップしているYoutube動画情報をYoutube APIで取得して、カスタマーにサイトのページで提供したり、別のオリジナルなAPIとして提供してる訳っすよ。
例えば、YoutubeのNHKオンラインでアップされてる動画情報を取得するのに、ユーザーIDが"NHKonline"と分かってるんだが、ユーザーIDからチャンネルIDを取得しないと動画情報は取得できないんだが、チャンネルIDを取得するAPIってぇのがあって、それが下のURLのような感じ…
APIキーってぇのはこのAPIが誰でも使えちゃうのも差し障りがあるんだか知らんが、Youtube APIを使っていいよって証になるキーですね。すると下のようなJSONという構造体のデータを返してくれるんスよ。 NHKオンラインのチャンネルIDは"UCip8ve30-AoX2y2OtAAmqFA"だわねってことが分かる訳っすよ。まぁこのあとチャンネルIDを使って動画情報を取得して、そういうデータをうまく加工してカスタマーに提供したりする訳っすね。
ちなみにオイラのAPIキーがばれるとまずいので、ユーザーIDからチャンネルIDを取得するページを簡単に作ってみました。Google Chromeで拡張機能のJSON Viewをインストールしないと上のようにきれいに表示されないと思うけどご参考まで。次回はもう少し突っ込んだ話を。
http://sunao-labo.main.jp/api/youtube/get_channel_id.php

オイラが関わってる海外ドラマのサイトは、放送局が持っているFacebookサイトのウォール情報をFacebookのAPIで、放送局のアップしているYoutube動画情報をYoutube APIで取得して、カスタマーにサイトのページで提供したり、別のオリジナルなAPIとして提供してる訳っすよ。
例えば、YoutubeのNHKオンラインでアップされてる動画情報を取得するのに、ユーザーIDが"NHKonline"と分かってるんだが、ユーザーIDからチャンネルIDを取得しないと動画情報は取得できないんだが、チャンネルIDを取得するAPIってぇのがあって、それが下のURLのような感じ…
https://www.googleapis.com/youtube/v3/channels
?part=contentDetails&forUsername=ユーザーID&key={APIキー}
?part=contentDetails&forUsername=ユーザーID&key={APIキー}
APIキーってぇのはこのAPIが誰でも使えちゃうのも差し障りがあるんだか知らんが、Youtube APIを使っていいよって証になるキーですね。すると下のようなJSONという構造体のデータを返してくれるんスよ。 NHKオンラインのチャンネルIDは"UCip8ve30-AoX2y2OtAAmqFA"だわねってことが分かる訳っすよ。まぁこのあとチャンネルIDを使って動画情報を取得して、そういうデータをうまく加工してカスタマーに提供したりする訳っすね。
ちなみにオイラのAPIキーがばれるとまずいので、ユーザーIDからチャンネルIDを取得するページを簡単に作ってみました。Google Chromeで拡張機能のJSON Viewをインストールしないと上のようにきれいに表示されないと思うけどご参考まで。次回はもう少し突っ込んだ話を。
http://sunao-labo.main.jp/api/youtube/get_channel_id.php

AmazonのクラウドサービスEC2でボリュームの拡張
2018/01/27 Sat 15:28:16 [edit]
[root@ip-1X-X-X-XX ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/xvda1 20G 1.8G 18G 9% /
devtmpfs 993M 60K 993M 1% /dev
tmpfs 1002M 0 1002M 0% /dev/shm
/dev/xvdf 50G 45G 2.2G 96% /mnt/xxxx
容量を確認。/dev/xvdf は96%になったけどあんまり余裕なし。Filesystem Size Used Avail Use% Mounted on
/dev/xvda1 20G 1.8G 18G 9% /
devtmpfs 993M 60K 993M 1% /dev
tmpfs 1002M 0 1002M 0% /dev/shm
/dev/xvdf 50G 45G 2.2G 96% /mnt/xxxx
そのうちまたデータが一杯になるのは想像に難くないので、ハードディスクを増設しようと。
それで、AmazonのクラウドサービスEC2の便利なところがサーバが稼働中にハードディスクのボリュームを増量することができるんスよ。実機でだったら稼働中にUSB接続で外付けハードディスクをアタッチすることは出来るけど、さすがに動いてる内臓ハードディスクの容量を300GBから500GBに増量なんて出来ないっしょ?
この後、この管理サーバにsshでログインしてパーティション領域を拡張する作業が必要なんスよ。
[root@ip-1X-X-X-XX ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 20G 0 disk
+-xvda1 202:1 0 20G 0 part /
xvdf 202:80 0 70G 0 disk /mnt/xxxx
ボリューム増量後は70GBになってるね。ここでパーティションを拡張するコマンドを投入。NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 20G 0 disk
+-xvda1 202:1 0 20G 0 part /
xvdf 202:80 0 70G 0 disk /mnt/xxxx
[root@ip-1X-X-X-XX ~]# growpart /dev/xvdf 1
FAILED: unable to determine partition type
ありゃ?だわねぇ。じゃあファイルシステムを強制的にチェックしよう。FAILED: unable to determine partition type
[root@ip-1X-X-X-XX mnt]# e2fsck -f /dev/xvdf
e2fsck 1.42.12 (29-Aug-2014)
/dev/xvdf is mounted.
e2fsck: Cannot continue, aborting.
やっぱ、ディスクをマウントしたままじゃダメかぁ。エイやでアンマウントしてみるかぁ。e2fsck 1.42.12 (29-Aug-2014)
/dev/xvdf is mounted.
e2fsck: Cannot continue, aborting.
[root@ip-1X-X-X-XX mnt]# umount /mnt/xxxx
[root@ip-1X-X-X-XX mnt]# e2fsck -f /dev/xvdf
e2fsck 1.42.12 (29-Aug-2014)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/xvdf: 750800/3276800 files (0.2% non-contiguous), 11882540/13107200 blocks
出来たねぇ。じゃあファイルシステムのリサイズコマンドいいんじゃね?[root@ip-1X-X-X-XX mnt]# e2fsck -f /dev/xvdf
e2fsck 1.42.12 (29-Aug-2014)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/xvdf: 750800/3276800 files (0.2% non-contiguous), 11882540/13107200 blocks
[root@ip-1X-X-X-XX mnt]# resize2fs /dev/xvdf
resize2fs 1.42.12 (29-Aug-2014)
Resizing the filesystem on /dev/xvdf to 18350080 (4k) blocks.
The filesystem on /dev/xvdf is now 18350080 (4k) blocks long.
すかさずマウントすると…resize2fs 1.42.12 (29-Aug-2014)
Resizing the filesystem on /dev/xvdf to 18350080 (4k) blocks.
The filesystem on /dev/xvdf is now 18350080 (4k) blocks long.
[root@ip-1X-X-X-XX mnt]# mount /dev/xvdf /mnt/xxxx
[root@ip-1X-X-X-XX mnt]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/xvda1 20G 1.8G 18G 9% /
devtmpfs 993M 64K 993M 1% /dev
tmpfs 1002M 0 1002M 0% /dev/shm
/dev/xvdf 69G 45G 21G 69% /mnt/xxxx
出来ましたねぇ。[root@ip-1X-X-X-XX mnt]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/xvda1 20G 1.8G 18G 9% /
devtmpfs 993M 64K 993M 1% /dev
tmpfs 1002M 0 1002M 0% /dev/shm
/dev/xvdf 69G 45G 21G 69% /mnt/xxxx

PowerShellを使ってアプリの自動実行(その1)
2017/04/28 Fri 11:38:33 [edit]
仕事で某BS有料放送の番組ページ等が3万ページ弱あるサイトのクロールをして、"Apache Solr"という全文検索システムで、番組キーワードに該当するページの検索結果をサイトのサムネイルとともに表示するシステムを管理してる。
サムネイルを作成する現行システムはあるにはあるんだが、理由があってリプレイスしたいと考えている。サイトを巡回してサムネイルを作成するアプリケーション
をいろいろ探してるんだが、なかなかいいのがない。たまたま見つけたのが上のCrenaHtml2jpgと云うアプリ。コイツのイイところはGUI(グラフィカルユーザーインターフェース)とCLI(コマンドラインインタフェース)の両方で使えて、例えばサイトを巡回してバッチ処理的にサムネイルを作成するには、CLIを使えばいいのだ。
だが色々試行錯誤したのだが、自分が管理しているサイトでは、GUIの方じゃないとちゃんとキャプチャーしてくんないということが判明。
どうしたものかと思ってたらWindowsに標準でついてるPowerShellを使えば、GUIのテキストボックスとかにターゲットのURIを入力したり、実行ボタンを押してくれるスクリプトが書けるらしい。
但し前準備が必要で、動かしたいアプリケーションのテキストボックスやボタン等の部品(オブジェクト要素)のプロパティを取得したり、書き換えたりするUIAutomation.dllというのをインポートする必要がある。
先ずは、http://uiautomation.codeplex.com/ に行き、Downloadボタンを押してzipをダウンロード、
Documents\WindowsPowerShell\Modules\UIAutomation
に展開する。
次にPowerShellを開いて、上記のディレクトリに移動し、下のコマンドを実行。
Get-Moduleして以下のようにでてくればOK。
そして、こんな感じでスクリプトを書いて、PowerShellに実行させるらしい。
"C:\Program Files\CrenaHtml2jpg-v1.20\"
にインストールされているという前提です。

サムネイルを作成する現行システムはあるにはあるんだが、理由があってリプレイスしたいと考えている。サイトを巡回してサムネイルを作成するアプリケーション
をいろいろ探してるんだが、なかなかいいのがない。たまたま見つけたのが上のCrenaHtml2jpgと云うアプリ。コイツのイイところはGUI(グラフィカルユーザーインターフェース)とCLI(コマンドラインインタフェース)の両方で使えて、例えばサイトを巡回してバッチ処理的にサムネイルを作成するには、CLIを使えばいいのだ。
だが色々試行錯誤したのだが、自分が管理しているサイトでは、GUIの方じゃないとちゃんとキャプチャーしてくんないということが判明。
どうしたものかと思ってたらWindowsに標準でついてるPowerShellを使えば、GUIのテキストボックスとかにターゲットのURIを入力したり、実行ボタンを押してくれるスクリプトが書けるらしい。
但し前準備が必要で、動かしたいアプリケーションのテキストボックスやボタン等の部品(オブジェクト要素)のプロパティを取得したり、書き換えたりするUIAutomation.dllというのをインポートする必要がある。
先ずは、http://uiautomation.codeplex.com/ に行き、Downloadボタンを押してzipをダウンロード、
Documents\WindowsPowerShell\Modules\UIAutomation
に展開する。
次にPowerShellを開いて、上記のディレクトリに移動し、下のコマンドを実行。
PS > Import-Module .\UIAutomation.dll
Get-Moduleして以下のようにでてくればOK。
PS > Get-Module UIA*
ModuleType Version Name ExportedCommands
---------- ------- ---- ----------------
Binary 0.8.7.79 UIAutomation {Add-UiaBannerText...
ModuleType Version Name ExportedCommands
---------- ------- ---- ----------------
Binary 0.8.7.79 UIAutomation {Add-UiaBannerText...
そして、こんな感じでスクリプトを書いて、PowerShellに実行させるらしい。
$process = Start-Process -FilePath "C:\Program Files\CrenaHtml2jpg-v1.20\CrenaHtml2jpg.exe" -PassThru
$window = Get-UiaWindow -ProcessId $process.Id
$window | Get-UiaEdit -AutomationId '1010' -Class 'Edit' -Name 'http://www.yahoo.co.jp' | `
Set-UIAControlText -Text "http://www.wowow.co.jp/detail/110495";
$window | Get-UiaButton -Name '実行' | Invoke-UiaButtonClick | Out-Null
$window | Get-UiaButton -Name '終了' | Invoke-UiaButtonClick | Out-Null
ちなみにこれは、CrenaHtml2jpg.exe のアプリケーションが、$window = Get-UiaWindow -ProcessId $process.Id
$window | Get-UiaEdit -AutomationId '1010' -Class 'Edit' -Name 'http://www.yahoo.co.jp' | `
Set-UIAControlText -Text "http://www.wowow.co.jp/detail/110495";
$window | Get-UiaButton -Name '実行' | Invoke-UiaButtonClick | Out-Null
$window | Get-UiaButton -Name '終了' | Invoke-UiaButtonClick | Out-Null
"C:\Program Files\CrenaHtml2jpg-v1.20\"
にインストールされているという前提です。

URLリストに従って、順次Google ChromeでURLを開くバッチプログラム
2017/01/24 Tue 16:15:06 [edit]
表題の通り、URLリストに従って、Google Chromeで順次指定したURLを開くバッチプログラムなんスけど、先ず
すると、10秒毎にURLのページをクロームで開き、閉じるという動作をするだけなんスけど、これに間に画面キャプチャーするコマンドを入れてやると、サイトキャプチャーソフトの出来上がりってぇわけです。
ちなみにurl_list.txtとtest01.batは同一フォルダに置く必要があるんっすよ。
--- test01.bat
--- url_list.txt
別にクロームでURLを開いてもなんの意味もないんスけど、オフィス・オートメーションで単純な仕事やるときにこんな手法で事務処理をするっていうのが賢いやり方っすよ。

- メモ帳(notepad.exe)で参照したいURLを列記して、url_list.txtという名前で保存。
- 同じくメモ帳で下のプログラムの通り打ち込んで、test01.batという名前で保存。
- test01.batダブルクリックして実行。
すると、10秒毎にURLのページをクロームで開き、閉じるという動作をするだけなんスけど、これに間に画面キャプチャーするコマンドを入れてやると、サイトキャプチャーソフトの出来上がりってぇわけです。
ちなみにurl_list.txtとtest01.batは同一フォルダに置く必要があるんっすよ。
--- test01.bat
echo off
REM --- url_list.txtから一行ずつ読み込みURLを取得 -----------------
for /f "delims=" %%a in (url_list.txt) do (
start chrome --app=%%a
timeout /T 10
REM --- ここに画面キャプチャコマンド等を挿入
REM --- タスク削除 -------------------------------------------------
for /f "usebackq tokens=1,2 delims=," %%a in (`tasklist /FI "imagename eq chrome*" /FI "status eq RUNNING" /FO CSV /NH`) do (
taskkill /pid %%~b
)
)
REM --- url_list.txtから一行ずつ読み込みURLを取得 -----------------
for /f "delims=" %%a in (url_list.txt) do (
start chrome --app=%%a
timeout /T 10
REM --- ここに画面キャプチャコマンド等を挿入
REM --- タスク削除 -------------------------------------------------
for /f "usebackq tokens=1,2 delims=," %%a in (`tasklist /FI "imagename eq chrome*" /FI "status eq RUNNING" /FO CSV /NH`) do (
taskkill /pid %%~b
)
)
--- url_list.txt
http://www.infoseek.co.jp/
http://www.rakuten.co.jp/
http://news.infoseek.co.jp/topics/itmedia_mobile_20170124030/
http://news.infoseek.co.jp/topics/gendainet_370857/
http://news.infoseek.co.jp/topics/170124jijiX678/
http://www.rakuten.co.jp/
http://news.infoseek.co.jp/topics/itmedia_mobile_20170124030/
http://news.infoseek.co.jp/topics/gendainet_370857/
http://news.infoseek.co.jp/topics/170124jijiX678/
別にクロームでURLを開いてもなんの意味もないんスけど、オフィス・オートメーションで単純な仕事やるときにこんな手法で事務処理をするっていうのが賢いやり方っすよ。
