電子書籍アプリ自動スクリーンショットApple Script解説

eyechatch電子書籍S解説
SBMJOB

スクリーンショット自動化のApple Script解説とiPhone・iPadだけでのスクリーンショット自動化について考えていきます。

目次

スポンサーリンク

自動化と著作権等関連法規について

関連法規について

DXでの自動化は取り扱う内容によっては法規制の対象になる場合があるので注意しましょう。

  • 著作権等権利に関わる場合
  • 処理量増加や占有に伴うサーバ負荷に関わる場合
  • その他

スクリプトの説明

スクリプト

--変数設定
global waitSeconds
global appName
set waitSeconds to 0.5 --スクリーンショットのタイミングが合わない場合は秒数を調整する。
set appName to "Kindle" --ここにはアプリケーション名を記述してください。SafariとかKindxとか

-- OSVersinon確認 10.14 Mojaveより前のOSでは使えません。
set OSVer to do shell script "sw_vers -productVersion| cut -d '.' -f 1-2"
set nOSVer to OSVer as number
if nOSVer < 10.14 then
	display alert "このスクリプトはMojave以降のOSでしか使えません。"
	process_end()
end if
--スクリーンショット回数の指定ダイアログ表示
display dialog "範囲指定と保存先設定は済んでいますか?" & return & "" & return & "範囲指定:点線エリアを調整します。" & return & "保存先:画面右下のオプションから保存先を指定します。" & return & "最後に右下のパネルをxで閉じるか「取り込む」を押します。" buttons {"はい", "設定", "終了"} default answer "はい" with title "選択範囲設定確認Step0"
set confirmPattern to button returned of result
if confirmPattern = "終了" then
	process_end()
end if
if confirmPattern = "設定" then
	screenshottoolopen()
end if
--スクリーンショット回数の指定ダイアログ表示
display dialog "スクショする回数を入力してください。" default answer "5" with title "自動スクショStep1"
set screenShotNumber to text returned of result
--電子書籍のページ方向の指定ダイアログ表示(右開きなのか左開きなのか)
display dialog "右開き?左開き?" buttons {"左", "右"} default button 2 with title "自動スクショStep2"
set btn to button returned of result


repeat with p from 1 to screenShotNumber
	tell application appName
		activate
		tell application "System Events"
			delay waitSeconds
			shot_screenshot() of me --撮影
			--ページ送り処理
			if btn = "右" then
				--key code 123
				keystroke (ASCII character 29) -- ページ右送り
			else --左
				--key code 124
				keystroke (ASCII character 28) -- ページ左送り
			end if
			delay waitSeconds
		end tell
	end tell
end repeat

tell me
	activate
	display alert "処理が終了しました。"
end tell


--Mac ScreenShotツールでスクリーンショット取得
--このツールはMojave以降で使えます。
on shot_screenshot()
	delay 1
	tell application "System Events"
		key code 23 using {command down, shift down}
		delay waitSeconds
		key code 76
	end tell
	delay 1
end shot_screenshot
--設定のためにScreenShotToolを起動する。
on screenshottoolopen()
	tell application appName
		activate
		tell application "System Events"
			key code 23 using {command down, shift down}
		end tell
	end tell
end screenshottoolopen
on process_end()
	error number -128
end process_end

コード説明 抜粋

KindleアプリはデータをローカルPCにダウンロードが済んでから表示しスクリーンショットを取得していきますが、ページ送りに時間がかかる場合があります。そのため処理の途中で処理待ち時間を数秒入れています。もしご使用の環境でスクリーンショットのタイミングが合わない場合はこの処理待ち時間を増やして調整してみてください。

set waitSeconds to 0.5 --スクリーンショットのタイミングが合わない場合は秒数を調整する。
set appName to "Kindle" --ここにはアプリケーション名を記述してください。SafariとかKindxとか

本記事でのスクリーンショットはMac OS10.14 Mojave以降から搭載されている「スクリーンショット.app」で選択範囲と保存先の機能を使用しています。そのため古いMac OSだと起動できないようにコーデインングしております。古いOSで自動化したい場合は過去記事をご参照ください。

-- OSVersinon確認 10.14 Mojaveより前のOSでは使えません。
set OSVer to do shell script "sw_vers -productVersion| cut -d '.' -f 1-2"
set nOSVer to OSVer as number
if nOSVer < 10.14 then
	display alert "このスクリプトはMojave以降のOSでしか使えません。"
	process_end()
end if

スクリーンショットの回数とページ開き方向の設定をダイアログボックスを使って対話型で入力してもらいます。

--スクリーンショット回数の指定ダイアログ表示
display dialog "スクショする回数を入力してください。" default answer "5" with title "自動スクショStep1"
set screenShotNumber to text returned of result
--電子書籍のページ方向の指定ダイアログ表示(右開きなのか左開きなのか)
display dialog "右開き?左開き?" buttons {"左", "右"} default button 2 with title "自動スクショStep2"
set btn to button returned of result

ここがスクリーンショットを繰り返す処理になります。appNameでアプリケーションをしていし一番手前に表示させます、そこからshot_screenshot関数でスクリーンショットを取得します。ページ送りではkeystrokeを使っていますがkey code指定ではページが切り替わらなかったからです。この中で2回delayをいれていますのでここでタイミングを調整しています。

repeat with p from 1 to screenShotNumber
	tell application appName
		activate
		tell application "System Events"
			delay waitSeconds
			shot_screenshot() of me --撮影
			--ページ送り処理
			if btn = "右" then
				--key code 123
				keystroke (ASCII character 29) -- ページ右送り
			else --左
				--key code 124
				keystroke (ASCII character 28) -- ページ左送り
			end if
			delay waitSeconds
		end tell
	end tell
end repeat

「スクリーンショット.app」をkey codeで起動しkey code 76を送信しスクリーンショットを取得しています。

--このツールはMojave以降で使えます。
on shot_screenshot()
	delay 1
	tell application "System Events"
		key code 23 using {command down, shift down}
		delay waitSeconds
		key code 76
	end tell
	delay 1
end shot_screenshot

範囲指定と保存先の設定を行うために「スクリーンショット.app」を起動させていますので、key code 76がない関数になっています。上のshot_screenshot()に引数を実装させて共通関数にしてもよいです。

--設定のためにScreenShotToolを起動する。
on screenshottoolopen()
	tell application appName
		activate
		tell application "System Events"
			key code 23 using {command down, shift down}
		end tell
	end tell
end screenshottoolopen

iPhone iPadだけでスクショ自動化を検討中

アセンシブタッチを使って楽にスクショ

iPhone・iPadでは自動でスクリーンショットを撮る事ができません。これできちゃうとセキュリティー上かなりも問題になってきますね。

iPhoneやiPadのスマホ・タブレットではアプリケーション間の制御のやりとりが制限されています。ですので以下の手順で処理をする事が実質不可能になっています。

スクリーンショット取得→電子書籍アプリでのページ送り→スクリーンショット取得 (繰り返し)

また、処理のスタート起点も確立できないのも課題です。

iPhone・iPadの「ショートカット」を利用する方法も検討しましたが今のところレシピを作れるまでには至っていません。

今後の検討として「スイッチコントロール」を使ってみる方法がありますが、こちらもタップ数の制限があり素のままでは自動化に利用が難しいです。打開策として外部からレシピを起動されるといけそうな気もします。

スイッチのソースで外部のBluetoothキーボードを接続してApple Scriptでキーストローク送ってそれをトリガーにするとできるかもしれませんが、そもそもそれってiPhoneだけで実行できていないですよね・・・


スクリーンショット過去記事とMacのスクリーンショット手動まとめ

↓スクリーンショット自動化第二弾記事 範囲指定でスクリーンショットできる様にコーディングしていますが、画面上に点線を表示できていないので使用感がすっきりしていませんので今回の記事第三弾を作成しました。ただこの2回目の記事はMojaveより前のOSを使っている場合には有効な範囲指定スクショ機能となっています。

↓Macでのスクリーンショット取得(手動)のまとめ記事 手動でのスクリーンショット取得機能の解説をしている記事です。時々ショートカットキー等を忘れるのでその時のために記述しておきました。

学習方法

udemy私も使っています。おすすめは安い時期に興味がある講座をいくつか購入しておいて時間がある時に見る!流し見でもいいと思います。

今回の記事ではApple Scriptを用いて実装していますが、udemyでもApple Scriptの講座が少なくて英語と他の言語でのに講座だったと思います。他の講座もきっと興味を惹かれるはずです。

AmazonではApple Scriptの書籍はほとんどないです。詳しく知りたいのであればwebで情報収集となります。

いろんなスクールがあります。この辺りみてみたのですがpython系多いですね。pythonでもMacの自動化は可能ですので業務でDXやってる方は必須の知識ですね。この記事は初学者向けに作成していますのでApple Scriptで実装しています。

スポンサーリンク

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

システム開発SE・アプリ開発・デバッガー等々なんでもやる猫の下僕です。現在は凶暴猫にカタカタ動く手を狙われながらキーボードを打っています。かなりゆるい性格なのでコメントやメッセージお気軽に〜お仕事のご依頼もお気軽にぃ〜

スポンサーリンク

コメント

コメント一覧 (2件)

  • はじめまして。
    こちらの記事を拝見して、キンドル→adobe scan→good note5で参考書の文字検索ができるような仕様にして勉強しています。
    本当に有益な情報ありがとうございます。
    おかげで勉強が習慣化しました。

  • 初めまして。こちらの記事を参考にスクショさせていただいております。
    ありがとうございます!

    こちらのスクリプトをいじって、ページの送るスピードを早めることはできるのでしょうか?

    お手隙の際で構いませんのでお返事いただけると幸いです。
    よろしくお願い申し上げます。

コメントする

CAPTCHA


目次