Menu

Skip to content
AppleScriptの穴
  • Home
  • Products
  • Books
  • Docs
  • Events
  • Forum
  • About This Blog
  • License
  • 仕事依頼

AppleScriptの穴

Useful & Practical AppleScript archive. Click '★Click Here to Open This Script' Link to download each AppleScript

投稿者: Takaaki Naganoya

デスクトップ以下のスクリーンキャプチャファイルの一覧を取得 v2

Posted on 3月 26, 2018 by Takaaki Naganoya

指定フォルダ以下に存在するファイルのうち条件に合うものをSpotlightの機能を用いて抽出するAppleScriptです。デスクトップフォルダ以下にあるスクリーンキャプチャを検索します。

Spotlight検索にはShane Stanleyの「Metadata Lib」のバージョン2.0を使用しています。インストールしていない環境では動かないので、事前に~/Library/Script Libraries/フォルダにインストールしておいてください。

Metadata Libはv1.xではAppleScript用語辞書がついていませんでしたが、v2.xではAppleScript用語辞書(sdef)が追加され、いわゆる英単語っぽい表記でパラメータを指定できるようになりました。

再掲載にあたってv2.0の表記に書き換えてみました。

AppleScript名:デスクトップ以下のスクリーンキャプチャファイルの一覧を取得 v2
— Created 2017-09-23 by Takaaki Naganoya
— 2017 Piyomaru Software
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"
use mdLib : script "Metadata Lib" version "2.0.0"

set theFolder to path to desktop
set sStr to "kMDItemIsScreenCapture == %@"
set fRes to perform search in folders {theFolder} predicate string sStr search arguments {true}

return fRes

★Click Here to Open This Script 

Posted in Spotlight | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

Metadata Lib v2.0の命令をひととおりチェック

Posted on 3月 26, 2018 by Takaaki Naganoya
AppleScript名:Metadata Lib v2.0の命令をひととおりチェック
— Created 2017-09-23 by Takaaki Naganoya
— 2017 Piyomaru Software
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"
use mdLib : script "Metadata Lib" version "2.0.0" –https://www.macosxautomation.com/applescript/apps/

–mdfind
set theFolder to path to desktop
set sStr to "kMDItemResolutionHeightDPI == %@ && kMDItemResolutionWidthDPI == %@ && NOT (kMDItemContentTypeTree contains %@)"
set fRes to perform search in folders {theFolder} predicate string sStr search arguments {144, 144, "com.apple.icns"}
log fRes
–> {"/Users/me/Desktop/From Desktop 2018.1.9/FromDesktop/スクリーンショット 2015-12-18 13.02.14.png"}

–scope strings
set aRes to metadata scope strings
log aRes
–> {"kMDQueryScopeHome", "kMDQueryScopeNetwork", "kMDQueryScopeComputer", "kMDQueryScopeAllIndexed", "kMDQueryScopeComputerIndexed", "kMDQueryScopeNetworkIndexed"}
–https://developer.apple.com/documentation/coreservices/file_metadata/mdquery/query_search_scope_keys?preferredLanguage=occ

–mdls
set aFile to choose file with prompt ""
set aRes to fetch metadata for item aFile
log aRes
–> {kMDItemFSCreatorCode:0, kMDItemFSFinderFlags:0, kMDItemFSContentChangeDate:date "2018年3月14日水曜日 1:32:07", kMDItemFSName:"0261F5E3-9BE4-4007-B7D8-10E56E13FB24.dot", kMDItemDisplayName:"0261F5E3-9BE4-4007-B7D8-10E56E13FB24.dot", kMDItemFSInvisible:false, kMDItemFSSize:2506, kMDItemFSOwnerUserID:504, kMDItemDateAdded:date "2018年3月14日水曜日 1:32:07", kMDItemPhysicalSize:4096, kMDItemKind:"Microsoft Word 97 – 2004 テンプレート (.dot)", _kMDItemOwnerUserID:504, kMDItemContentTypeTree:{"public.item", "public.data", "com.microsoft.word.dot"}, kMDItemFSTypeCode:0, kMDItemFSIsExtensionHidden:false, kMDItemLogicalSize:2506, kMDItemFSLabel:0, kMDItemContentModificationDate:date "2018年3月14日水曜日 1:32:07", kMDItemUseCount:2, kMDItemContentType:"com.microsoft.word.dot", kMDItemFSOwnerGroupID:80, kMDItemContentCreationDate:date "2018年3月14日水曜日 1:32:07", kMDItemUsedDates:{date "2018年3月14日水曜日 0:00:00"}, kMDItemFSCreationDate:date "2018年3月14日水曜日 1:32:07"}

–既存のsavedsearchから情報を読み取る
set sFile to choose file of type {"com.apple.finder.smart-folder"} with prompt "Select saved search file (purple folder icon)" default location (path to home folder)
search strings from saved search (POSIX path of sFile)
–> {"((_kMDItemGroupId = 11) && (kMDItemContentCreationDate > 489942000))", "_kMDItemGroupId == \"11\" AND kMDItemContentCreationDate > \"489942000\""}

★Click Here to Open This Script 

Posted in Spotlight | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

デスクトップ上のRetina解像度の画像でICNS以外のものを検索 v2

Posted on 3月 26, 2018 by Takaaki Naganoya

指定フォルダ以下に存在するファイルのうち条件に合うものをSpotlightの機能を用いて抽出するAppleScriptです。デスクトップフォルダ以下にあるRetina解像度の画像(144 x 144dpi)で、ファイル形式がICNS「以外のもの」を検索します。

Spotlight検索にはShane Stanleyの「Metadata Lib」のバージョン2.0を使用しています。インストールしていない環境では動かないので、事前に~/Library/Script Libraries/フォルダにインストールしておいてください。

Metadata Libはv1.xではAppleScript用語辞書がついていませんでしたが、v2.xではAppleScript用語辞書(sdef)が追加され、いわゆる英単語っぽい表記でパラメータを指定できるようになりました。

再掲載にあたってv2.0の表記に書き換えてみました。

AppleScript名:デスクトップ上のRetina解像度の画像でICNS以外のものを検索 v2
— Created 2017-09-23 by Takaaki Naganoya
— 2017 Piyomaru Software
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"
use mdLib : script "Metadata Lib" version "2.0.0" –https://www.macosxautomation.com/applescript/apps/

set theFolder to path to desktop
–v1.x
–set fRes to mdLib’s searchFolders:{theFolder} searchString:"kMDItemResolutionHeightDPI == %@ && kMDItemResolutionWidthDPI == %@ && NOT (kMDItemContentTypeTree contains %@)" searchArgs:{144, 144, "com.apple.icns"}
–> {"/Users/me/Desktop/FromDesktop/スクリーンショット 2015-12-18 13.02.14.png", "/Users/me/Desktop/FromDesktop/conicon.png", "/Users/me/Desktop/FromDesktop/スクリーンショット 2015-08-14 18.08.41.png"}

–v2.x
set sStr to "kMDItemResolutionHeightDPI == %@ && kMDItemResolutionWidthDPI == %@ && NOT (kMDItemContentTypeTree contains %@)"
set fRes to perform search in folders {theFolder} predicate string sStr search arguments {144, 144, "com.apple.icns"}
–> {"/Users/me/Desktop/From Desktop 2018.1.9/FromDesktop/スクリーンショット 2015-12-18 13.02.14.png"}

★Click Here to Open This Script 

Posted in Spotlight | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

POSIX path stringを与えると、ファイル名の重複を検出&名称回避を行って、ファイル名のみを返す

Posted on 3月 23, 2018 by Takaaki Naganoya

POSIX pathのフルパスの文字列(quoteなし)を与えると、そのファイルを実際に作成した場合に指定のパスに同名のファイルが存在するかどうか重複検出を行い、重複するものがあった場合には重複回避してファイル名を返すAppleScriptです。

# 一部ミスがあるものを掲載していたので、書き換えておきました

ファイルの新規保存を行う際に、安全に新しい名称を指定できるよう、重複検出および重複回避を行います。

デスクトップ上に、

  test.jpg
  test_1.jpg

というファイルがあった場合に、本Scriptで「test.jpg」を指定すると、同じ名前のファイルがデスクトップに存在するものと判定されて、名称の衝突回避を行います。

回避するためにファイル名の末尾に「_」+番号を付けて回避を行いますが、すでに「test_1.jpg」が存在するために、本Scriptではさらに名称回避を行なって「test_2.jpg」の文字列を返します。

子番号については、1〜65535の範囲で追加するようにしています。常識的にこれだけ指定しておけば大丈夫だろう、ということであってとくに上限に意味はありません。

AppleScript名:POSIX path stringを与えると、ファイル名の重複を検出&名称回避を行って、ファイル名のみを返す v2
— Created 2020-08-15 by Takaaki Naganoya
— 2015-2020 Piyomaru Software
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"

property NSString : a reference to current application’s NSString
property NSFileManager : a reference to current application’s NSFileManager
property NSOrderedSame : a reference to current application’s NSOrderedSame

set newPath to POSIX path of (choose file name)

set ab to chkExistPOSIXpathAndIncrementChildNumber(newPath) of me

–POSIX path stringを与えると、ファイル名の重複を検出して、ファイル名の名称回避を行って、ファイル名のみを返す
on chkExistPOSIXpathAndIncrementChildNumber(aPOSIX as string)
  set aStr to NSString’s stringWithString:aPOSIX
  
  
–ファイルパス(フルパス)からファイル名部分を取得
  
set bStr to aStr’s lastPathComponent()
  
–> "P0000_000.csv"
  
  
–ファイル名から拡張子を取得
  
set cStr to (bStr’s pathExtension()) as string
  
–> "csv"
  
  
–ファイル名から拡張子を削除
  
set dStr to (bStr’s stringByDeletingPathExtension()) as string
  
–> "P0000_000"
  
  
–ファイルパス(フルパス)から親フォルダを取得(ただし末尾はスラッシュになっていない)
  
set eStr to (aStr’s stringByDeletingLastPathComponent()) as string
  
–>  "/Users/me/Desktop"
  
  
set aManager to NSFileManager’s defaultManager()
  
set aRes to (aManager’s fileExistsAtPath:aStr) as boolean
  
if aRes = false then
    –ファイル名の衝突がなかった場合
    
return bStr as string
  end if
  
  
set hitF to false
  
repeat with i from 1 to 65535
    
    
set tmpPath to (eStr & "/" & dStr & "_" & (i as string) & "." & cStr)
    
set tmpStr to (NSString’s stringWithString:tmpPath)
    
set aRes to (aManager’s fileExistsAtPath:tmpStr) as boolean
    
set bRes to ((tmpStr’s caseInsensitiveCompare:eStr) is not equal to (NSOrderedSame)) as boolean
    
    
if {aRes, bRes} = {false, true} then
      set hitF to true
      
exit repeat
    end if
    
  end repeat
  
  
if hitF = false then return false
  
  
–ファイルパス(フルパス)からファイル名部分を取得
  
set returnFileName to tmpStr’s lastPathComponent()
  
return (returnFileName as string)
  
end chkExistPOSIXpathAndIncrementChildNumber

★Click Here to Open This Script 

Posted in file | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

指定フォルダ内の指定文字列を含むファイル名のファイルをPOSIX pathのlistで抽出する

Posted on 3月 21, 2018 by Takaaki Naganoya
AppleScript名:指定フォルダ内の指定文字列を含むファイル名のファイルをPOSIX pathのlistで抽出する
— Created 2017-09-12 by Takaaki Naganoya
— 2017 Piyomaru Software
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"

property |NSURL| : a reference to current application’s |NSURL|
property NSPredicate : a reference to current application’s NSPredicate
property NSFileManager : a reference to current application’s NSFileManager
property NSMutableArray : a reference to current application’s NSMutableArray
property NSURLIsDirectoryKey : a reference to current application’s NSURLIsDirectoryKey
property NSDirectoryEnumerationSkipsHiddenFiles : a reference to current application’s NSDirectoryEnumerationSkipsHiddenFiles
property NSDirectoryEnumerationSkipsPackageDescendants : a reference to current application’s NSDirectoryEnumerationSkipsPackageDescendants
property NSDirectoryEnumerationSkipsSubdirectoryDescendants : a reference to current application’s NSDirectoryEnumerationSkipsSubdirectoryDescendants

set aFol to POSIX path of (choose folder with prompt "Choose folder" default location (path to desktop folder))
set pRes to my getFilesByIncludedStringInName:"スクリーン" fromDirectory:aFol exceptPackages:true
–> {"/Users/me/Desktop/スクリーンショット 2018-02-28 14.01.09.png", "/Users/me/Desktop/スクリーンショット 2018-02-28 14.01.11.png", …}

–指定フォルダ内の指定文字列を含むファイル名のファイルをPOSIX pathのlistで抽出する
on getFilesByIncludedStringInName:(fileNameStr as string) fromDirectory:(sourceFolder) exceptPackages:(packageF as boolean)
  set fileManager to NSFileManager’s defaultManager()
  
set aURL to |NSURL|’s fileURLWithPath:sourceFolder
  
set theOptions to ((NSDirectoryEnumerationSkipsPackageDescendants) as integer) + ((NSDirectoryEnumerationSkipsHiddenFiles) as integer) + ((NSDirectoryEnumerationSkipsSubdirectoryDescendants) as integer)
  
set directoryContents to fileManager’s contentsOfDirectoryAtURL:aURL includingPropertiesForKeys:{} options:theOptions |error|:(missing value)
  
set findPredicates to NSPredicate’s predicateWithFormat_("lastPathComponent CONTAINS %@", fileNameStr)
  
set foundItemList to directoryContents’s filteredArrayUsingPredicate:findPredicates
  
  
–Remove Folders From found URL Array
  
set anArray to NSMutableArray’s alloc()’s init()
  
repeat with i in foundItemList
    set j to contents of i
    
set {theResult, isDirectory} to (j’s getResourceValue:(reference) forKey:(NSURLIsDirectoryKey) |error|:(missing value))
    
    
–Collect files
    
if (isDirectory as boolean = false) then
      (anArray’s addObject:j)
      
    else if (packageF = false) then
      –Allow Package files?
      
set {theResult, isPackage} to (j’s getResourceValue:(reference) forKey:(current application’s NSURLIsPackageKey) |error|:(missing value))
      
if (isPackage as boolean) = true then
        (anArray’s addObject:j)
      end if
    end if
    
  end repeat
  
  
return (anArray’s valueForKey:"path") as list
end getFilesByIncludedStringInName:fromDirectory:exceptPackages:

★Click Here to Open This Script 

Posted in file | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

フォルダの存在確認

Posted on 3月 20, 2018 by Takaaki Naganoya
AppleScript名:フォルダの存在確認
— Created 2017-10-31 by Takaaki Naganoya
— 2017 Piyomaru Software
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"
use framework "AppKit"

set bPath to POSIX path of (choose folder)
set bExt to current application’s NSFileManager’s defaultManager()’s fileExistsAtPath:bPath isDirectory:true
–> true

★Click Here to Open This Script 

AppleScript名:フォルダの存在確認(OLD Style AS)
set aFolder to choose folder

tell application "Finder"
  set aRes to exists of aFolder
  
–> true
end tell

★Click Here to Open This Script 

Posted in folder | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

ファイルの存在確認

Posted on 3月 20, 2018 by Takaaki Naganoya
AppleScript名:ファイルの存在確認
— Created 2017-10-31 by Takaaki Naganoya
— 2017 Piyomaru Software
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"
use framework "AppKit"

set aPath to POSIX path of (choose file)
set aExt to current application’s NSFileManager’s defaultManager()’s fileExistsAtPath:aPath
–> true

★Click Here to Open This Script 

AppleScript名:ファイルの存在確認(OLD Style AS)
set aFile to choose file

tell application "Finder"
  set aRes to exists of aFile
  
–> true
end tell

★Click Here to Open This Script 

Posted in file | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

2フォルダ間の内容比較

Posted on 3月 20, 2018 by Takaaki Naganoya
AppleScript名:2フォルダ間の内容比較
— Created 2015-12-22 by Takaaki Naganoya
— 2015 Piyomaru Software
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"

set aFol to (choose folder with prompt "Select Folder A")
set bFol to (choose folder with prompt "Select Folder B")

set aPath to POSIX path of aFol
set bPath to POSIX path of bFol

set aFM to current application’s NSFileManager’s defaultManager()
set aRes to (aFM’s contentsEqualAtPath:aPath andPath:bPath) as boolean

★Click Here to Open This Script 

Posted in file folder | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

2ファイルの内容比較(Binary)

Posted on 3月 20, 2018 by Takaaki Naganoya
AppleScript名:2ファイルの内容比較(Binary)
— Created 2016-03-22 by Takaaki Naganoya
— 2016 Piyomaru Software
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"

set aPOSIX to POSIX path of (choose file with prompt "Select File A")
set bPOSIX to POSIX path of (choose file with prompt "Select File B")

set aDat to current application’s NSMutableData’s dataWithContentsOfFile:aPOSIX
set bDat to current application’s NSMutableData’s dataWithContentsOfFile:bPOSIX

set aRes to (aDat’s isEqualToData:bDat) as boolean

★Click Here to Open This Script 

Posted in file | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

2ファイルの内容比較(UTF-8 String)

Posted on 3月 20, 2018 by Takaaki Naganoya
AppleScript名:2ファイルの内容比較(UTF-8 String)
— Created 2016-03-22 by Takaaki Naganoya
— 2016 Piyomaru Software
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"

set aPOSIX to POSIX path of (choose file with prompt "Select Text File A")
set bPOSIX to POSIX path of (choose file with prompt "Select Text File B")

set aStr to current application’s NSString’s stringWithContentsOfFile:aPOSIX encoding:(current application’s NSUTF8StringEncoding) |error|:(missing value)
set bStr to current application’s NSString’s stringWithContentsOfFile:bPOSIX encoding:(current application’s NSUTF8StringEncoding) |error|:(missing value)

set aRes to (aStr’s isEqualToString:bStr) as boolean

★Click Here to Open This Script 

Posted in file | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

テキストのパーセント表記を数値に変換する

Posted on 3月 20, 2018 by Takaaki Naganoya
AppleScript名:テキストのパーセント表記を数値に変換する
— Created 2018-03-18 by Takaaki Naganoya
— 2018 Piyomaru Software
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"

set aStr to current application’s NSString’s stringWithString:"80%"
set aNum to aStr’s intValue()
–>  80

set bNum to aStr’s doubleValue()
–>  80.0

★Click Here to Open This Script 

Posted in Number Text | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

URLとrecordからパラメータつきURLを生成する v3

Posted on 3月 19, 2018 by Takaaki Naganoya

指定のURLに対して、recordで指定したパラメータつきURLを生成するAppleScriptです。

REST APIを呼び出すときに使っているため、登場頻度がきわめて高いサブルーチンです。OLD Style AppleScriptの機能の範囲内で書くこともできますが、Cocoaの機能を用いたほうが圧倒的に手軽に書ける好例といえます。

AppleScript名:URLとrecordからパラメータつきURLを生成する v3
— Created 2016-04-19 by Takaaki Naganoya
— Modified 2016-11-12 by Takaaki Naganoya
— 2016 Piyomaru Software
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"

property NSURLQueryItem : a reference to current application’s NSURLQueryItem
property NSMutableDictionary : a reference to current application’s NSMutableDictionary
property NSURLComponents : a reference to current application’s NSURLComponents

set aBaseURL to "https://slack.com/api/auth.test"
set aRec to {token:"aaaa", channel:"ぴよまるソフトウェア"}
set aRes to retURLwithParams(aBaseURL, aRec) of me
–>  "https://slack.com/api/auth.test?token=aaaa&channel=%E3%81%B4%E3%82%88%E3%81%BE%E3%82%8B%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2"

on retURLwithParams(aBaseURL as string, aRec as record)
  set aDic to NSMutableDictionary’s dictionaryWithDictionary:aRec
  
  
set aKeyList to (aDic’s allKeys()) as list
  
set aValList to (aDic’s allValues()) as list
  
set aLen to length of aKeyList
  
set bLen to length of aValList
  
if aLen is not equal to bLen then return false
  
  
set qList to {}
  
repeat with i from 1 to aLen
    set aName to (contents of item i of aKeyList) as string
    
set aVal to (contents of item i of aValList) as string
    
set the end of qList to (NSURLQueryItem’s queryItemWithName:aName value:aVal)
  end repeat
  
  
set aComp to NSURLComponents’s alloc()’s initWithString:aBaseURL
  
aComp’s setQueryItems:qList
  
set aURL to (aComp’s |URL|()’s absoluteString()) as text
  
  
return aURL
end retURLwithParams

★Click Here to Open This Script 

Posted in Record URL | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

USBゲームコントローラーの情報を取得する

Posted on 3月 18, 2018 by Takaaki Naganoya

MacにUSB接続しているゲームコントローラーの情報を取得するAppleScriptです。

あくまでUSB接続しているコントローラーに限られ、同時にBluetooth接続のゲームコントローラー(PlayStation 3用のDual Shock3)があっても無視されるようです。

AppleScript名:USBゲームコントローラーの情報を取得する
— Created 2017-03-21 18:47:15 +0900 by Takaaki Naganoya
— 2017 Piyomaru Software
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"
use framework "GameController"

set aController to current application’s GCController’s controllers()
–>  (NSArray) {​​​​​(_GCController) <GCController 0x6080004a2580 vendorName=’USB Game Device’ deviceHash=0xbe8dba5719e63307>​​​}

set aCon to aController’s firstObject()
if aCon = missing value then return
set aGameCon to aCon’s gamepad()
–>  (_GCMFiGamepadControllerProfile) <_GCMFiGamepadControllerProfile: 0x6000000df870>

set aExGameCon to aCon’s extendedGamepad()
–>  missing value

set aMicGameCon to aCon’s microGamepad()
–>  (_GCMFiGamepadControllerProfile) <_GCMFiGamepadControllerProfile: 0x6000000df870>

set aMotion to aCon’s motion()
–>  missing value

set aVendor to aCon’s vendorName() as string
–>  "USB Game Device"

set anAttached to aCon’s isAttachedToDevice()
–>  false

★Click Here to Open This Script 

Posted in GAME System | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

(GET)駅すぱあとAPIで平均待ち時間「バスのみ探索」

Posted on 3月 17, 2018 by Takaaki Naganoya

ヴァル研究所が提供している、公共交通機関の乗り換え検索アプリケーション「駅すぱあと」のREST APIを呼び出して、バス路線の検索を行うAppleScriptです。


(「47都道府県鉄道路線図」より引用)

掲載の本Scriptをためしてみる場合には、かならずご自分で「駅すぱあとWebサービス スタンダードプラン」90日間無料試用コードを取得してScript末尾にあるハンドラに記入してから実行してください。そのまま実行するとエラーになります。

駅コードで発停留所、着停留所をIDで指定して経路検索を行います。本サンプルでは、関東バスの「中村橋」から、「阿佐ヶ谷駅」までの経路を検索しています。時間については平均待ち時間を適用しているとのこと。

AppleScript名:(GET)駅すぱあとAPIで平均待ち時間バスのみ探索
— Created 2018-03-16 by Takaaki Naganoya
— 2018 Piyomaru Software
use AppleScript version "2.5" –macOS 10.11 or later
use scripting additions
use framework "Foundation"

–http://docs.ekispert.com/v1/api/search/course/bus.html
set aURL to "https://api.ekispert.jp/v1/json/search/course/bus"

set apiKey to retAccessToken() of me
set aRec to {|key|:apiKey, |from|:"45848", |to|:"45507"} –関東バス 「中村橋駅」発、「阿佐ヶ谷」着
set reqURLStr to retURLwithParams(aURL, aRec) of me

set aRes to callRestGETAPIAndParseResults(reqURLStr) of me
set aRESCode to (responseCode of aRes) as integer
if aRESCode is not equal to 200 then return false

set aRESHeader to responseHeader of aRes
set aRESTres to json of aRes as list of string or string

–GET methodのREST APIを呼ぶ
on callRestGETAPIAndParseResults(aURL)
  set aRequest to current application’s NSMutableURLRequest’s requestWithURL:(current application’s |NSURL|’s URLWithString:aURL)
  
aRequest’s setHTTPMethod:"GET"
  
aRequest’s setValue:"gzip" forHTTPHeaderField:"Content-Encoding"
  
  
set aRes to current application’s NSURLConnection’s sendSynchronousRequest:aRequest returningResponse:(reference) |error|:(missing value)
  
set resList to aRes as list
  
  
set bRes to contents of (first item of resList)
  
set resStr to current application’s NSString’s alloc()’s initWithData:bRes encoding:(current application’s NSUTF8StringEncoding)
  
  
set jsonString to current application’s NSString’s stringWithString:resStr
  
set jsonData to jsonString’s dataUsingEncoding:(current application’s NSUTF8StringEncoding)
  
set aJsonDict to current application’s NSJSONSerialization’s JSONObjectWithData:jsonData options:0 |error|:(missing value)
  
  
–Get Response Code & Header
  
set dRes to contents of second item of resList
  
if dRes is not equal to missing value then
    set resCode to (dRes’s statusCode()) as number
    
set resHeaders to (dRes’s allHeaderFields()) as record
  else
    set resCode to 0
    
set resHeaders to {}
  end if
  
  
return {json:aJsonDict, responseCode:resCode, responseHeader:resHeaders}
end callRestGETAPIAndParseResults

on retURLwithParams(aBaseURL, aRec)
  set aDic to current application’s NSMutableDictionary’s dictionaryWithDictionary:aRec
  
set aKeyList to (aDic’s allKeys()) as list
  
set aValList to (aDic’s allValues()) as list
  
set aLen to length of aKeyList
  
  
set qList to {}
  
repeat with i from 1 to aLen
    set aName to contents of item i of aKeyList
    
set aVal to contents of item i of aValList
    
set the end of qList to (current application’s NSURLQueryItem’s queryItemWithName:aName value:aVal)
  end repeat
  
  
set aComp to current application’s NSURLComponents’s alloc()’s initWithString:aBaseURL
  
aComp’s setQueryItems:qList
  
set aURL to (aComp’s |URL|()’s absoluteString()) as text
  
  
return aURL
end retURLwithParams

on retAccessToken()
  return "xxxx_XXxxXXXxxXX" –API Key
end retAccessToken

★Click Here to Open This Script 

Posted in Network REST API | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

(GET)駅すぱあとAPIで経路簡易探索(駅名称指定)

Posted on 3月 17, 2018 by Takaaki Naganoya

ヴァル研究所が提供している、公共交通機関の乗り換え検索アプリケーション「駅すぱあと」のREST APIを呼び出して、駅名から経路検索を行うAppleScriptです。


(「47都道府県鉄道路線図」より引用)

掲載の本Scriptをためしてみる場合には、かならずご自分で「駅すぱあとWebサービス スタンダードプラン」90日間無料試用コードを取得してScript末尾にあるハンドラに記入してから実行してください。そのまま実行するとエラーになります。

駅コードで発駅、経由駅、着駅を指定して経路検索を行います。本サンプルでは、西武池袋線の中村橋駅から、池袋駅を経由して、京急線の羽田空港国内線ターミナル駅までの経路を検索しています。

AppleScript名:(GET)駅すぱあとAPIで経路簡易探索(駅名称指定)
— Created 2018-03-16 by Takaaki Naganoya
— 2018 Piyomaru Software
use AppleScript version "2.5" –macOS 10.11 or later
use scripting additions
use framework "Foundation"

–http://docs.ekispert.com/v1/api/search/course.html
set aURL to "https://api.ekispert.jp/v1/json/search/course"

set apiKey to retAccessToken() of me
set aRec to {|key|:apiKey, |from|:"中村橋", |to|:"池袋", via:"羽田空港国内線ターミナル"} –中村橋駅 発、池袋経由、羽田空港国内線ターミナル 着
set reqURLStr to retURLwithParams(aURL, aRec) of me

set aRes to callRestGETAPIAndParseResults(reqURLStr) of me
set aRESCode to (responseCode of aRes) as integer
if aRESCode is not equal to 200 then return false

set aRESHeader to responseHeader of aRes
set aRESTres to json of aRes as list of string or string

–GET methodのREST APIを呼ぶ
on callRestGETAPIAndParseResults(aURL)
  set aRequest to current application’s NSMutableURLRequest’s requestWithURL:(current application’s |NSURL|’s URLWithString:aURL)
  
aRequest’s setHTTPMethod:"GET"
  
aRequest’s setValue:"gzip" forHTTPHeaderField:"Content-Encoding"
  
  
set aRes to current application’s NSURLConnection’s sendSynchronousRequest:aRequest returningResponse:(reference) |error|:(missing value)
  
set resList to aRes as list
  
  
set bRes to contents of (first item of resList)
  
set resStr to current application’s NSString’s alloc()’s initWithData:bRes encoding:(current application’s NSUTF8StringEncoding)
  
  
set jsonString to current application’s NSString’s stringWithString:resStr
  
set jsonData to jsonString’s dataUsingEncoding:(current application’s NSUTF8StringEncoding)
  
set aJsonDict to current application’s NSJSONSerialization’s JSONObjectWithData:jsonData options:0 |error|:(missing value)
  
  
–Get Response Code & Header
  
set dRes to contents of second item of resList
  
if dRes is not equal to missing value then
    set resCode to (dRes’s statusCode()) as number
    
set resHeaders to (dRes’s allHeaderFields()) as record
  else
    set resCode to 0
    
set resHeaders to {}
  end if
  
  
return {json:aJsonDict, responseCode:resCode, responseHeader:resHeaders}
end callRestGETAPIAndParseResults

on retURLwithParams(aBaseURL, aRec)
  set aDic to current application’s NSMutableDictionary’s dictionaryWithDictionary:aRec
  
set aKeyList to (aDic’s allKeys()) as list
  
set aValList to (aDic’s allValues()) as list
  
set aLen to length of aKeyList
  
  
set qList to {}
  
repeat with i from 1 to aLen
    set aName to contents of item i of aKeyList
    
set aVal to contents of item i of aValList
    
set the end of qList to (current application’s NSURLQueryItem’s queryItemWithName:aName value:aVal)
  end repeat
  
  
set aComp to current application’s NSURLComponents’s alloc()’s initWithString:aBaseURL
  
aComp’s setQueryItems:qList
  
set aURL to (aComp’s |URL|()’s absoluteString()) as text
  
  
return aURL
end retURLwithParams

on retAccessToken()
  return "xxxx_XXxxXXXxxXX" –API Key
end retAccessToken

★Click Here to Open This Script 

Posted in Network REST API | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

(GET)駅すぱあとAPIでデータバージョンを取得

Posted on 3月 17, 2018 by Takaaki Naganoya

ヴァル研究所が提供している、公共交通機関の乗り換え検索アプリケーション「駅すぱあと」のREST APIを呼び出して、データのバージョンを求めるAppleScriptです。

本Scriptをためしてみる場合には、かならずご自分で「駅すぱあとWebサービス スタンダードプラン」の試用コードを取得してScript末尾にあるハンドラに記入してから実行してください。そのまま実行するとエラーになります。

AppleScript名:(GET)駅すぱあとAPIでデータバージョンを取得
— Created 2018-03-16 by Takaaki Naganoya
— 2018 Piyomaru Software
use AppleScript version "2.5" –macOS 10.11 or later
use scripting additions
use framework "Foundation"

set aURL to "https://api.ekispert.jp/v1/json/dataversion"

set apiKey to retAccessToken() of me
set aRec to {|key|:apiKey}
set reqURLStr to retURLwithParams(aURL, aRec) of me

set aRes to callRestGETAPIAndParseResults(reqURLStr) of me
set aRESCode to (responseCode of aRes) as integer
if aRESCode is not equal to 200 then return false

set aRESHeader to responseHeader of aRes
set aRESTres to json of aRes as list of string or string

(*
{​​​​​ResultSet:{​​​​​​​engineVersion:"201803_04a", ​​​​​​​Version:{​​​​​​​​​{​​​​​​​​​​​createType:"Edition", ​​​​​​​​​​​create:"20180304", ​​​​​​​​​​​caption:"知識ベース"​​​​​​​​​}, ​​​​​​​​​{​​​​​​​​​​​createType:"Edition", ​​​​​​​​​​​create:"20180304", ​​​​​​​​​​​caption:"鉄道時刻表"​​​​​​​​​}, ​​​​​​​​​{​​​​​​​​​​​createType:"Date", ​​​​​​​​​​​caption:"JR", ​​​​​​​​​​​createComment:"Now", ​​​​​​​​​​​create:"20180317"​​​​​​​​​}, ​​​​​​​​​{​​​​​​​​​​​createType:"Date", ​​​​​​​​​​​caption:"私鉄", ​​​​​​​​​​​createComment:"Now", ​​​​​​​​​​​create:"20180312"​​​​​​​​​}, ​​​​​​​​​{​​​​​​​​​​​createType:"Edition", ​​​​​​​​​​​caption:"航空時刻表", ​​​​​​​​​​​rangeTo:"20180531", ​​​​​​​​​​​rangeFrom:"20180201", ​​​​​​​​​​​rangeCaption:"有効期間", ​​​​​​​​​​​create:"20180401"​​​​​​​​​}, ​​​​​​​​​{​​​​​​​​​​​createType:"Edition", ​​​​​​​​​​​create:"20180401", ​​​​​​​​​​​caption:"高速・連絡・深夜急行バス"​​​​​​​​​}, ​​​​​​​​​{​​​​​​​​​​​createType:"Edition", ​​​​​​​​​​​create:"20180401", ​​​​​​​​​​​caption:"船"​​​​​​​​​}, ​​​​​​​​​{​​​​​​​​​​​createType:"Date", ​​​​​​​​​​​caption:"得トクきっぷデータ", ​​​​​​​​​​​createComment:"Now", ​​​​​​​​​​​create:"20180201"​​​​​​​​​}, ​​​​​​​​​{​​​​​​​​​​​createType:"HideDay", ​​​​​​​​​​​caption:"住所データ", ​​​​​​​​​​​createComment:"Now", ​​​​​​​​​​​create:"20170101"​​​​​​​​​}​​​​​​​}, ​​​​​​​Copyrights:{​​​​​​​​​companyId:"2", ​​​​​​​​​text:"交承 平成25年68号
JRデータの内容は、株式会社交通新聞社発行の「JR時刻表」2018年3月号に基づいています。
この時刻データを無断で転載・複写し、又は紙媒体、電磁媒体その他いかなる媒体に加工することも禁じます。

JRバスデータの内容は、株式会社交通新聞社作成のデータ平成30年3月分に基づいています。この時刻データを無断転載・複写や電磁媒体等に加工することを禁じます。

名鉄バスの情報は、名鉄バス株式会社作成のデータに基づいています。ただし一部のバス停ポール情報は株式会社ヴァル研究所が自らの責任により加工したものです。

ほか、一部の内容は株式会社ヴァル研究所が自らの責任により加工したものです。
", ​​​​​​​​​company:"株式会社交通新聞社"​​​​​​​}, ​​​​​​​apiVersion:"1.27.0.0"​​​​​}​​​}
*)

–GET methodのREST APIを呼ぶ
on callRestGETAPIAndParseResults(aURL)
  set aRequest to current application’s NSMutableURLRequest’s requestWithURL:(current application’s |NSURL|’s URLWithString:aURL)
  
aRequest’s setHTTPMethod:"GET"
  
aRequest’s setValue:"gzip" forHTTPHeaderField:"Content-Encoding"
  
  
set aRes to current application’s NSURLConnection’s sendSynchronousRequest:aRequest returningResponse:(reference) |error|:(missing value)
  
set resList to aRes as list
  
  
set bRes to contents of (first item of resList)
  
set resStr to current application’s NSString’s alloc()’s initWithData:bRes encoding:(current application’s NSUTF8StringEncoding)
  
  
set jsonString to current application’s NSString’s stringWithString:resStr
  
set jsonData to jsonString’s dataUsingEncoding:(current application’s NSUTF8StringEncoding)
  
set aJsonDict to current application’s NSJSONSerialization’s JSONObjectWithData:jsonData options:0 |error|:(missing value)
  
  
–Get Response Code & Header
  
set dRes to contents of second item of resList
  
if dRes is not equal to missing value then
    set resCode to (dRes’s statusCode()) as number
    
set resHeaders to (dRes’s allHeaderFields()) as record
  else
    set resCode to 0
    
set resHeaders to {}
  end if
  
  
return {json:aJsonDict, responseCode:resCode, responseHeader:resHeaders}
end callRestGETAPIAndParseResults

on retURLwithParams(aBaseURL, aRec)
  set aDic to current application’s NSMutableDictionary’s dictionaryWithDictionary:aRec
  
set aKeyList to (aDic’s allKeys()) as list
  
set aValList to (aDic’s allValues()) as list
  
set aLen to length of aKeyList
  
  
set qList to {}
  
repeat with i from 1 to aLen
    set aName to contents of item i of aKeyList
    
set aVal to contents of item i of aValList
    
set the end of qList to (current application’s NSURLQueryItem’s queryItemWithName:aName value:aVal)
  end repeat
  
  
set aComp to current application’s NSURLComponents’s alloc()’s initWithString:aBaseURL
  
aComp’s setQueryItems:qList
  
set aURL to (aComp’s |URL|()’s absoluteString()) as text
  
  
return aURL
end retURLwithParams

on retAccessToken()
  return "xxxx_XXxxXXXxxXX" –API Key
end retAccessToken

★Click Here to Open This Script 

Posted in Network REST API | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

(GET)駅すぱあとAPIで経路検索

Posted on 3月 16, 2018 by Takaaki Naganoya

ヴァル研究所が提供している、公共交通機関の乗り換え検索アプリケーション「駅すぱあと」のREST APIを呼び出して、経路検索を行うAppleScriptです。


(「47都道府県鉄道路線図」より引用)

掲載の本Scriptをためしてみる場合には、かならずご自分で「駅すぱあとWebサービス スタンダードプラン」90日間無料試用コードを取得してScript末尾にあるハンドラに記入してから実行してください。そのまま実行するとエラーになります。

駅コードで発駅、経由駅、着駅を指定して経路検索を行います。本サンプルでは、西武池袋線の中村橋駅から、池袋駅を経由して、京急線の羽田空港国内線ターミナル駅までの経路を検索しています。

駅すぱあとAPIのドキュメントを読んだかぎりでは、

 ①駅コード(ユニークなコード)で検索
 ②駅名称で検索
 ③緯度経度情報で検索
 ④住所情報を検索
 ⑤地区データで検索

といった検索が可能なようです。まずは、一番重要な駅コードによる検索を調べてみた次第です。

AppleScript名:(GET)駅すぱあとAPIで経路検索
— Created 2018-03-16 by Takaaki Naganoya
— 2018 Piyomaru Software
use AppleScript version "2.5" –macOS 10.11 or later
use scripting additions
use framework "Foundation"

set aURL to "https://api.ekispert.jp/v1/json/search/course/extreme"

set apiKey to retAccessToken() of me
set aRec to {|key|:apiKey, viaList:"22854:22513:22911"} –中村橋駅 発、池袋経由、羽田空港国内線ターミナル 着
set reqURLStr to retURLwithParams(aURL, aRec) of me

set aRes to callRestGETAPIAndParseResults(reqURLStr) of me
set aRESCode to (responseCode of aRes) as integer
if aRESCode is not equal to 200 then return false

set aRESHeader to responseHeader of aRes
set aRESTres to json of aRes as list of string or string

–GET methodのREST APIを呼ぶ
on callRestGETAPIAndParseResults(aURL)
  set aRequest to current application’s NSMutableURLRequest’s requestWithURL:(current application’s |NSURL|’s URLWithString:aURL)
  
aRequest’s setHTTPMethod:"GET"
  
aRequest’s setValue:"gzip" forHTTPHeaderField:"Content-Encoding"
  
  
set aRes to current application’s NSURLConnection’s sendSynchronousRequest:aRequest returningResponse:(reference) |error|:(missing value)
  
set resList to aRes as list
  
  
set bRes to contents of (first item of resList)
  
set resStr to current application’s NSString’s alloc()’s initWithData:bRes encoding:(current application’s NSUTF8StringEncoding)
  
  
set jsonString to current application’s NSString’s stringWithString:resStr
  
set jsonData to jsonString’s dataUsingEncoding:(current application’s NSUTF8StringEncoding)
  
set aJsonDict to current application’s NSJSONSerialization’s JSONObjectWithData:jsonData options:0 |error|:(missing value)
  
  
–Get Response Code & Header
  
set dRes to contents of second item of resList
  
if dRes is not equal to missing value then
    set resCode to (dRes’s statusCode()) as number
    
set resHeaders to (dRes’s allHeaderFields()) as record
  else
    set resCode to 0
    
set resHeaders to {}
  end if
  
  
return {json:aJsonDict, responseCode:resCode, responseHeader:resHeaders}
end callRestGETAPIAndParseResults

on retURLwithParams(aBaseURL, aRec)
  set aDic to current application’s NSMutableDictionary’s dictionaryWithDictionary:aRec
  
set aKeyList to (aDic’s allKeys()) as list
  
set aValList to (aDic’s allValues()) as list
  
set aLen to length of aKeyList
  
  
set qList to {}
  
repeat with i from 1 to aLen
    set aName to contents of item i of aKeyList
    
set aVal to contents of item i of aValList
    
set the end of qList to (current application’s NSURLQueryItem’s queryItemWithName:aName value:aVal)
  end repeat
  
  
set aComp to current application’s NSURLComponents’s alloc()’s initWithString:aBaseURL
  
aComp’s setQueryItems:qList
  
set aURL to (aComp’s |URL|()’s absoluteString()) as text
  
  
return aURL
end retURLwithParams

on retAccessToken()
  return "xxxx_XXxxXXXxxXX" –API Key
end retAccessToken

★Click Here to Open This Script 

Posted in JSON Network REST API | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

(GET)駅すぱあとAPIで駅コード検索

Posted on 3月 16, 2018 by Takaaki Naganoya

ヴァル研究所が提供している、公共交通機関の乗り換え検索アプリケーション「駅すぱあと」のREST APIを呼び出して、駅名称から「駅すぱあと」内部で利用している駅コードを検索するAppleScriptです。


(「47都道府県鉄道路線図」より引用)

「駅すぱあと」はほぼ日本人なら(とくに首都圏に住んでいると)誰でも知っている、電車をはじめとする公共交通機関の乗り換え情報を検索するアプリケーションです。

本来、AppleScriptと相性の良い処理のはずなのですが、Mac版のアプリケーションが最近は提供されておらず、さらに昔のMac版のアプリケーションもAppleScriptに対応していなかったので、長らく接点がありませんでした。

そんな中、「駅すぱあと」のREST APIが試用できるようになっていることを知り、さっそくサインアップして「駅すぱあとWebサービス スタンダードプラン」90日試用コードを取得してみました。掲載の本Scriptをためしてみる場合には、かならずご自分で試用コードを取得してScript末尾にあるハンドラに記入してから実行してください。そのまま実行するとエラーになります。

ドキュメントもよく整備されており、首をひねるような仕様もなく、日本国内で提供されているREST APIとしては非常によく整理されているといえます。

本来はいきなり経路検索を行いたかったのですが、経路検索を行うのに、駅固有のユニークコードである「駅コード」を調べられないと困るので、まずは駅コードから駅名称を調べたり、駅名称から駅コードを調べるAppleScriptを書いてみました(羽田空港からの帰りのバスの中で)。

これで、MacのExcelやFileMaker Pro、Numbersといったアプリケーションの書類上に入れたデータから経路検索を行なってこれらのアプリケーションのデータに返すことができるようになったわけで、応用範囲はきわめて広いといえます。

AppleScript名:(GET)駅すぱあとAPIで駅コード検索
— Created 2018-03-16 by Takaaki Naganoya
— 2018 Piyomaru Software
use AppleScript version "2.5" –macOS 10.11 or later
use scripting additions
use framework "Foundation"

set aURL to "https://api.ekispert.jp/v1/json/station/light"

set apiKey to retAccessToken() of me
set aRec to {|key|:apiKey, |name|:"羽田空港国内線ターミナル", type:"train"}
set reqURLStr to retURLwithParams(aURL, aRec) of me

set aRes to callRestGETAPIAndParseResults(reqURLStr) of me
set aRESCode to (responseCode of aRes) as integer
if aRESCode is not equal to 200 then return false

set aRESHeader to responseHeader of aRes
set aRESTres to (json of aRes) –NSDictionaryで返ってくる

set staCode to (aRESTres’s valueForKeyPath:"ResultSet.Point.Station.code") as list of string or string –as anything
–> 22854

–GET methodのREST APIを呼ぶ
on callRestGETAPIAndParseResults(aURL)
  set aRequest to current application’s NSMutableURLRequest’s requestWithURL:(current application’s |NSURL|’s URLWithString:aURL)
  
aRequest’s setHTTPMethod:"GET"
  
aRequest’s setValue:"gzip" forHTTPHeaderField:"Content-Encoding"
  
  
set aRes to current application’s NSURLConnection’s sendSynchronousRequest:aRequest returningResponse:(reference) |error|:(missing value)
  
set resList to aRes as list
  
  
set bRes to contents of (first item of resList)
  
set resStr to current application’s NSString’s alloc()’s initWithData:bRes encoding:(current application’s NSUTF8StringEncoding)
  
  
set jsonString to current application’s NSString’s stringWithString:resStr
  
set jsonData to jsonString’s dataUsingEncoding:(current application’s NSUTF8StringEncoding)
  
set aJsonDict to current application’s NSJSONSerialization’s JSONObjectWithData:jsonData options:0 |error|:(missing value)
  
  
–Get Response Code & Header
  
set dRes to contents of second item of resList
  
if dRes is not equal to missing value then
    set resCode to (dRes’s statusCode()) as number
    
set resHeaders to (dRes’s allHeaderFields()) as record
  else
    set resCode to 0
    
set resHeaders to {}
  end if
  
  
return {json:aJsonDict, responseCode:resCode, responseHeader:resHeaders}
end callRestGETAPIAndParseResults

on retURLwithParams(aBaseURL, aRec)
  set aDic to current application’s NSMutableDictionary’s dictionaryWithDictionary:aRec
  
set aKeyList to (aDic’s allKeys()) as list
  
set aValList to (aDic’s allValues()) as list
  
set aLen to length of aKeyList
  
  
set qList to {}
  
repeat with i from 1 to aLen
    set aName to contents of item i of aKeyList
    
set aVal to contents of item i of aValList
    
set the end of qList to (current application’s NSURLQueryItem’s queryItemWithName:aName value:aVal)
  end repeat
  
  
set aComp to current application’s NSURLComponents’s alloc()’s initWithString:aBaseURL
  
aComp’s setQueryItems:qList
  
set aURL to (aComp’s |URL|()’s absoluteString()) as text
  
  
return aURL
end retURLwithParams

on retAccessToken()
  return "xxxx_XXxxXXXxxXX" –API Key
end retAccessToken

★Click Here to Open This Script 

Posted in Network REST API | Tagged 10.11savvy 10.12savvy 10.13savvy | Leave a comment

(GET)駅すぱあとAPIで駅コードから駅名称を取得

Posted on 3月 16, 2018 by Takaaki Naganoya

ヴァル研究所が提供している、公共交通機関の乗り換え検索アプリケーション「駅すぱあと」のREST APIを呼び出して、「駅すぱあと」内部で利用している駅コードから駅の名称を取得するAppleScriptです。

「駅すぱあと」はほぼ日本人なら(とくに首都圏に住んでいると)誰でも知っている、電車をはじめとする公共交通機関の乗り換え情報を検索するアプリケーションです。


(「47都道府県鉄道路線図」より引用)

本来、AppleScriptと相性の良い処理のはずなのですが、Mac版のアプリケーションが最近は提供されておらず、さらに昔のMac版のアプリケーションもAppleScriptに対応していなかったので、長らく接点がありませんでした。

そんな中、「駅すぱあと」のREST APIが試用できるようになっていることを知り、さっそくサインアップして「駅すぱあとWebサービス スタンダードプラン」90日試用コードを取得してみました。掲載の本Scriptをためしてみる場合には、かならずご自分で試用コードを取得してScript末尾にあるハンドラに記入してから実行してください。そのまま実行するとエラーになります。

「駅すぱあと」のREST APIはドキュメントもよく整備されており、首をひねるような仕様もなく、日本国内で提供されているREST APIとしては非常によく整理されているといえます。

本来はいきなり経路検索を行いたかったのですが、経路検索を行うのに、駅固有のユニークコードである「駅コード」を調べられないと困るので、まずは駅コードから駅名称を調べたり、駅名称から駅コードを調べるAppleScriptを書いてみました(羽田空港からの帰りのバスの中で)。

これで、MacのExcelやFileMaker Pro、Numbersといったアプリケーションの書類上に入れたデータから経路検索を行なってこれらのアプリケーションのデータに返すことができるようになったわけで、応用範囲はきわめて広いといえます。

駅すぱあとAPIのドキュメントについては、1点だけ「format」の説明(結果の取得フォーマットがjsonかXMLかを指定)の説明がわかりづらく、この説明だとformat=jsonといった指定を行なってしまうと思います。

AppleScript名:(GET)駅すぱあとAPIで駅コードから駅名称を取得
— Created 2018-03-16 by Takaaki Naganoya
— 2018 Piyomaru Software
use AppleScript version "2.5" –macOS 10.11 or later
use scripting additions
use framework "Foundation"

set aURL to "https://api.ekispert.jp/v1/json/station"

set apiKey to retAccessToken() of me
set aRec to {|key|:apiKey, code:"25853"}
set reqURLStr to retURLwithParams(aURL, aRec) of me

set aRes to callRestGETAPIAndParseResults(reqURLStr) of me
set aRESCode to (responseCode of aRes) as integer
if aRESCode is not equal to 200 then return false

set aRESHeader to responseHeader of aRes
set aRESTres to (json of aRes) –NSDictionaryで返ってくる

set staCode to aRESTres’s valueForKeyPath:"ResultSet.Point.Station.Name"
–> "大阪"

–GET methodのREST APIを呼ぶ
on callRestGETAPIAndParseResults(aURL)
  set aRequest to current application’s NSMutableURLRequest’s requestWithURL:(current application’s |NSURL|’s URLWithString:aURL)
  
aRequest’s setHTTPMethod:"GET"
  
aRequest’s setValue:"gzip" forHTTPHeaderField:"Content-Encoding"
  
  
set aRes to current application’s NSURLConnection’s sendSynchronousRequest:aRequest returningResponse:(reference) |error|:(missing value)
  
set resList to aRes as list
  
  
set bRes to contents of (first item of resList)
  
set resStr to current application’s NSString’s alloc()’s initWithData:bRes encoding:(current application’s NSUTF8StringEncoding)
  
  
set jsonString to current application’s NSString’s stringWithString:resStr
  
set jsonData to jsonString’s dataUsingEncoding:(current application’s NSUTF8StringEncoding)
  
set aJsonDict to current application’s NSJSONSerialization’s JSONObjectWithData:jsonData options:0 |error|:(missing value)
  
  
–Get Response Code & Header
  
set dRes to contents of second item of resList
  
if dRes is not equal to missing value then
    set resCode to (dRes’s statusCode()) as number
    
set resHeaders to (dRes’s allHeaderFields()) as record
  else
    set resCode to 0
    
set resHeaders to {}
  end if
  
  
return {json:aJsonDict, responseCode:resCode, responseHeader:resHeaders}
end callRestGETAPIAndParseResults

on retURLwithParams(aBaseURL, aRec)
  set aDic to current application’s NSMutableDictionary’s dictionaryWithDictionary:aRec
  
set aKeyList to (aDic’s allKeys()) as list
  
set aValList to (aDic’s allValues()) as list
  
set aLen to length of aKeyList
  
  
set qList to {}
  
repeat with i from 1 to aLen
    set aName to contents of item i of aKeyList
    
set aVal to contents of item i of aValList
    
set the end of qList to (current application’s NSURLQueryItem’s queryItemWithName:aName value:aVal)
  end repeat
  
  
set aComp to current application’s NSURLComponents’s alloc()’s initWithString:aBaseURL
  
aComp’s setQueryItems:qList
  
set aURL to (aComp’s |URL|()’s absoluteString()) as text
  
  
return aURL
end retURLwithParams

on retAccessToken()
  return "xxxx_XXxxXXXxxXX" –API Key
end retAccessToken

★Click Here to Open This Script 

Posted in Network REST API | Tagged 10.11savvy 10.12savvy 10.13savvy | 1 Comment

NSSharingService経由でメールを新規作成(作成するだけ、送信しない)

Posted on 3月 14, 2018 by Takaaki Naganoya

NSSharingServiceを利用してメールを新規作成するAppleScriptです。

仕様上、新規作成するだけで送信は行いません。普通にMail.appをコントロールすればメールの送信は行えるので、単にNSSharingServiceのテストです。

AppleScript名:NSSharingService経由でメールを新規作成(作成するだけ、送信しない)
— Created 2017-02-23 by Takaaki Naganoya
— 2017 Piyomaru Software
use AppleScript version "2.4"
use scripting additions
use framework "Foundation"
use framework "AppKit"

set shareItems to {"てすとだよおおおん
2行目
3行目"
, "よろしくー1
よろしくー2"
, "Footer?"}
set aService to current application’s NSSharingService’s sharingServiceNamed:(current application’s NSSharingServiceNameComposeEmail)
aService’s setDelegate:me
aService’s setRecipients:{"nobody@piyocast.com"}
aService’s setSubject:"試験送信"
aService’s performWithItems:shareItems

★Click Here to Open This Script 

Posted in 未分類 | Tagged 10.11savvy 10.12savvy 10.13savvy Mail | Leave a comment

Post navigation

  • Older posts
  • Newer posts

電子書籍(PDF)をオンラインストアで販売中!

Google Search

Popular posts

  • macOS 26, Tahoe
  • KagiのWebブラウザ、Orion
  • Script Debuggerの開発と販売が2025年に終了
  • 【続報】macOS 15.5で特定ファイル名パターンのfileをaliasにcastすると100%クラッシュするバグ
  • macOS 15 リモートApple Eventsにバグ?
  • NSObjectのクラス名を取得 v2.1
  • macOS 15:スクリプトエディタのAppleScript用語辞書を確認できない
  • 2024年に書いた価値あるAppleScript
  • Xcode上のAppleScriptObjCのプログラムから、Xcodeのログ欄へのメッセージ出力を実行
  • (確認中)AppleScript Dropletのバグっぽい動作が解消?
  • AppleScript Dropletのバグっぽい動作が「復活」(macOS 15.5β)
  • macOS 26, 15.5でShortcuts.app「AppleScriptを実行」アクションのバグが修正される
  • Script Debuggerがフリーダウンロードで提供されることに
  • 指定フォルダ以下の画像のMD5チェックサムを求めて、重複しているものをピックアップ
  • Apple、macOS標準搭載アプリ「写真」のバージョン表記を間違える
  • 執筆中:AppleScript最新リファレンスver2.8対応(macOS 15対応アップデート)
  • macOS 15.5beta5(24F74)でaliasのキャスティングバグが修正された???
  • Keynoteで選択中のtext itemの冒頭のフォントを太くする v2
  • 複数の重複検出ルーチンを順次速度計測
  • 余白トリミング実験 v3

Tags

10.11savvy (1101) 10.12savvy (1242) 10.13savvy (1391) 10.14savvy (587) 10.15savvy (438) 11.0savvy (283) 12.0savvy (212) 13.0savvy (204) 14.0savvy (159) 15.0savvy (158) 26.0savvy (23) CotEditor (66) Finder (52) Keynote (119) NSAlert (61) NSArray (51) NSBitmapImageRep (20) NSBundle (20) NSButton (34) NSColor (53) NSDictionary (28) NSFileManager (23) NSFont (21) NSImage (41) NSJSONSerialization (21) NSMutableArray (63) NSMutableDictionary (22) NSPredicate (36) NSRunningApplication (56) NSScreen (30) NSScrollView (22) NSString (119) NSURL (98) NSURLRequest (23) NSUTF8StringEncoding (30) NSView (33) NSWorkspace (20) Numbers (76) Pages (56) Safari (44) Script Editor (27) WKUserContentController (21) WKUserScript (20) WKWebView (23) WKWebViewConfiguration (22)

カテゴリー

  • 2D Bin Packing
  • 3D
  • AirDrop
  • AirPlay
  • Animation
  • AppleScript Application on Xcode
  • Beginner
  • Benchmark
  • beta
  • Bluetooth
  • Books
  • boolean
  • bounds
  • Bug
  • Calendar
  • call by reference
  • check sum
  • Clipboard
  • Cocoa-AppleScript Applet
  • Code Sign
  • Color
  • Custom Class
  • date
  • dialog
  • diff
  • drive
  • Droplet
  • exif
  • file
  • File path
  • filter
  • folder
  • Font
  • Font
  • GAME
  • geolocation
  • GUI
  • GUI Scripting
  • Hex
  • History
  • How To
  • iCloud
  • Icon
  • Image
  • Input Method
  • Internet
  • iOS App
  • JavaScript
  • JSON
  • JXA
  • Keychain
  • Keychain
  • Language
  • Library
  • list
  • Locale
  • Localize
  • Machine Learning
  • Map
  • Markdown
  • Menu
  • Metadata
  • MIDI
  • MIME
  • Natural Language Processing
  • Network
  • news
  • Newt On Project
  • Noification
  • Notarization
  • Number
  • Object control
  • OCR
  • OSA
  • parallel processing
  • PDF
  • Peripheral
  • process
  • PRODUCTS
  • QR Code
  • Raw AppleEvent Code
  • Record
  • rectangle
  • recursive call
  • regexp
  • Release
  • Remote Control
  • Require Control-Command-R to run
  • REST API
  • Review
  • RTF
  • Sandbox
  • Screen Saver
  • Script Libraries
  • Scripting Additions
  • sdef
  • search
  • Security
  • selection
  • shell script
  • Shortcuts Workflow
  • Sort
  • Sound
  • Spellchecker
  • Spotlight
  • SVG
  • System
  • Tag
  • Telephony
  • Text
  • Text to Speech
  • timezone
  • Tools
  • Update
  • URL
  • UTI
  • Web Contents Control
  • WiFi
  • XML
  • XML-RPC
  • イベント(Event)
  • 未分類

アーカイブ

  • 2025年11月
  • 2025年10月
  • 2025年9月
  • 2025年8月
  • 2025年7月
  • 2025年6月
  • 2025年5月
  • 2025年4月
  • 2025年3月
  • 2025年2月
  • 2025年1月
  • 2024年12月
  • 2024年11月
  • 2024年10月
  • 2024年9月
  • 2024年8月
  • 2024年7月
  • 2024年6月
  • 2024年5月
  • 2024年4月
  • 2024年3月
  • 2024年2月
  • 2024年1月
  • 2023年12月
  • 2023年11月
  • 2023年10月
  • 2023年9月
  • 2023年8月
  • 2023年7月
  • 2023年6月
  • 2023年5月
  • 2023年4月
  • 2023年3月
  • 2023年2月
  • 2023年1月
  • 2022年12月
  • 2022年11月
  • 2022年10月
  • 2022年9月
  • 2022年8月
  • 2022年7月
  • 2022年6月
  • 2022年5月
  • 2022年4月
  • 2022年3月
  • 2022年2月
  • 2022年1月
  • 2021年12月
  • 2021年11月
  • 2021年10月
  • 2021年9月
  • 2021年8月
  • 2021年7月
  • 2021年6月
  • 2021年5月
  • 2021年4月
  • 2021年3月
  • 2021年2月
  • 2021年1月
  • 2020年12月
  • 2020年11月
  • 2020年10月
  • 2020年9月
  • 2020年8月
  • 2020年7月
  • 2020年6月
  • 2020年5月
  • 2020年4月
  • 2020年3月
  • 2020年2月
  • 2020年1月
  • 2019年12月
  • 2019年11月
  • 2019年10月
  • 2019年9月
  • 2019年8月
  • 2019年7月
  • 2019年6月
  • 2019年5月
  • 2019年4月
  • 2019年3月
  • 2019年2月
  • 2019年1月
  • 2018年12月
  • 2018年11月
  • 2018年10月
  • 2018年9月
  • 2018年8月
  • 2018年7月
  • 2018年6月
  • 2018年5月
  • 2018年4月
  • 2018年3月
  • 2018年2月

https://piyomarusoft.booth.pm/items/301502

メタ情報

  • ログイン
  • 投稿フィード
  • コメントフィード
  • WordPress.org

Forum Posts

  • 人気のトピック
  • 返信がないトピック

メタ情報

  • ログイン
  • 投稿フィード
  • コメントフィード
  • WordPress.org
Proudly powered by WordPress
Theme: Flint by Star Verte LLC