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

Gender APIを使って名前から性別を判定

Posted on 1月 7 by Takaaki Naganoya

Gender API(https://www.genderapi.io/ja#)のREST APIを呼び出して、氏名から性別を判定するAppleScriptを書いてみました。

本APIは、POST methodで呼び出すものですが、NSURLConnection経由で呼び出すPOST呼び出しのScriptしか書いてありませんでした。NSURLConnectionは同期実行が行えるため、AppleScriptからは呼び出しやすいものですが、Deprecated宣言されてしまっているため、いつ本当になくなるかわかりません(いうても、あちこちで必要なのですぐになくならない気もする)。

# 本Scriptは、間違いなく2026年の意義あるScriptにリストアップされるものです

そこで、NSURLSessionを呼び出すPOST method呼び出しのAppleScriptを書いておいた次第です。ChatGPTに書かせました。

set aPostData to {|name|:”ぴよ まるお”, country:”JP”, askToAI:false, forceToGenderize:false}

のように、氏名を指定して呼び出すと、

{|name|:”ぴよ まるお”, |to|:false, remaining_credits:178, q:”ぴよ まるお”, expires:1.767849716E+9, isHumanName:true, total_names:1, used_credits:1, probability:80, duration:”828ms”, country:”JP”, status:true, gender:”male”}

のように結果が返ってきます。

Gender APIは無料コースが用意されており、1日に200回までの呼び出しの範囲で無料利用できます。本当は、「日本語の氏名から性別を判定できる機械学習モデル」(Classifier)があれば、それを呼び出すだけで済むのですが、ちょっと探したぐらいでは見当たりませんでした。

こういうのは、公共機関が整備して配布すべきもののような気もするのですが……

AppleScript名:POST method REST API v4.2(NSURLSession)_blog.scptd
—
–  Created by: Takaaki Naganoya
–  Created on: 2026/01/07
—
–  Copyright © 2026 Piyomaru Software, All Rights Reserved
—

use AppleScript version "2.8"
use scripting additions
use framework "Foundation"
use framework "AppKit"

property |NSURL| : a reference to current application’s |NSURL|
property NSString : a reference to current application’s NSString
property NSURLCache : a reference to current application’s NSURLCache
property NSURLSession : a reference to current application’s NSURLSession
property NSMutableData : a reference to current application’s NSMutableData
property NSOperationQueue : a reference to current application’s NSOperationQueue
property NSMutableDictionary : a reference to current application’s NSMutableDictionary
property NSMutableURLRequest : a reference to current application’s NSMutableURLRequest
property NSJSONSerialization : a reference to current application’s NSJSONSerialization
property NSUTF8StringEncoding : a reference to current application’s NSUTF8StringEncoding
property NSURLSessionConfiguration : a reference to current application’s NSURLSessionConfiguration

property retData : missing value
property retCode : 0
property drecF : false
property aSession : missing value
property aCache : missing value

on run
  –https://www.genderapi.io/ja# にアクセスしてAPI Keyを取得してください
  
set apiKey to "Bearer " & "999zzz99z9999z99999z999z"
  
set reqURLStr to "https://api.genderapi.io/api"
  
set aPostData to {|name|:"長野谷 隆昌", country:"JP", askToAI:false, forceToGenderize:false}
  
  
set jsonDict to callRestPOSTJSON(reqURLStr, aPostData, 5, apiKey) of me
  
return jsonDict as record
  
–> {status:false, errno:93, errmsg:"query limit reached"}–API使用制限に到達した場合の返答
  
–> {status:false, errno:94, errmsg:"invalid or missing key"}–API Keyを指定しなかった場合の返答
  
–> {|name|:"長野谷 隆昌", |to|:false, remaining_credits:178, q:"長野谷 隆昌", expires:1.767849716E+9, isHumanName:true, total_names:1, used_credits:1, probability:80, duration:"828ms", country:"JP", status:true, gender:"male"}
end run

— POST JSON REST APIを呼び出す
on callRestPOSTJSON(reqURLStr as string, aRec as record, timeoutSec as integer, apiKey)
  set retData to NSMutableData’s alloc()’s init()
  
set retCode to 0
  
set drecF to false
  
  
–URL Cache(GETと同じ)
  
set cachePath to (POSIX path of (path to temporary items folder)) & "/Caches/AppleScriptURLCache"
  
set aCache to NSURLCache’s alloc()’s initWithMemoryCapacity:512000 diskCapacity:1024 * 1024 * 5 diskPath:cachePath
  
NSURLCache’s setSharedURLCache:aCache
  
  
–URL
  
set aURL to |NSURL|’s URLWithString:reqURLStr
  
  
–POST リクエスト作成
  
set aRequest to NSMutableURLRequest’s requestWithURL:aURL
  
aRequest’s setHTTPMethod:"POST"
  
aRequest’s setTimeoutInterval:timeoutSec
  
aRequest’s setValue:"application/json; charset=UTF-8" forHTTPHeaderField:"Content-Type"
  
aRequest’s setValue:apiKey forHTTPHeaderField:"Authorization"
  
aRequest’s setValue:"AppleScript/Cocoa" forHTTPHeaderField:"User-Agent"
  
  
–JSON化
  
set jsonData to NSJSONSerialization’s dataWithJSONObject:aRec options:0 |error|:(missing value)
  
aRequest’s setHTTPBody:jsonData
  
  
–Session
  
set aConfig to NSURLSessionConfiguration’s defaultSessionConfiguration()
  
aConfig’s setURLCache:aCache
  
  
set aSession to NSURLSession’s sessionWithConfiguration:aConfig delegate:(me) delegateQueue:(NSOperationQueue’s mainQueue())
  
set aTask to aSession’s dataTaskWithRequest:aRequest
  
aTask’s resume()
  
  
–delegate終了待ち
  
repeat (1000 * timeoutSec) times
    if drecF is true then exit repeat
    
delay "0.001" as real
  end repeat
  
  
–Session終了
  
aSession’s finishTasksAndInvalidate()
  
set aSession to missing value
  
  
–結果パース
  
return my parseSessionResults()
end callRestPOSTJSON

— delegate: body accumulation
on URLSession:tmpSession dataTask:tmpTask didReceiveData:tmpData
  retData’s appendData:tmpData
end URLSession:dataTask:didReceiveData:

— delegate: finished/failed
on URLSession:tmpSession task:tmpTask didCompleteWithError:tmpError
  if tmpError = missing value then
    set drecF to true
  else
    error "POST Failed:" & tmpError
  end if
end URLSession:task:didCompleteWithError:

–JSON parse
on parseSessionResults()
  set resStr to NSString’s alloc()’s initWithData:retData encoding:NSUTF8StringEncoding
  
set jsonString to NSString’s stringWithString:resStr
  
set jsonData2 to jsonString’s dataUsingEncoding:NSUTF8StringEncoding
  
set jsonDict to NSJSONSerialization’s JSONObjectWithData:jsonData2 options:0 |error|:(missing value)
  
return jsonDict
end parseSessionResults

★Click Here to Open This Script 

(Visited 41 times, 1 visits today)
Posted in REST API | Tagged 15.0savvy 26.0savvy NSURLSession | Leave a comment

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

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

Google Search

Popular posts

  • 最初期に書かれた書籍「AppleScript道入門」の序文をいま振り返る
  • Apple Creator Studioに含まれるKeynote/Pages/Numbersは新バージョン?
  • 簡易カラーチャート画像の出力 v2.1
  • macOS 15.7.2 スクリプトメニューから実行できなくなった地図系ライブラリ?
  • ASCII ART QR Encoder
  • 「AppleScriptセキュリティ実践ガイド」を発売
  • Keynote->Keynote Creator Studio(以下同様)
  • 翻訳テスト
  • Finder上で選択中のHEIC画像から位置情報を削除_v5
  • FSFindFolder failed with error=-43
  • YouTubeムービー再生実験
  • 2025年に書いた価値あるAppleScript
  • 関数計算ライブラリで一部のユーザーから再現しない問題が報告される件
  • ワークスペース切り替えv2.1
  • YouTubeムービー再生実験 v2c
  • macOS 26.xのSystem Events/Screen Saver preferencesにバグ
  • macOS 26.1が登場。Finderのバグが直らない?
  • 住所ジオコーダー2026年最新版
  • タブでインデントしたテキストをOutLineViewで表示できるデータ形式に変換 v4(3階層対応)
  • 指定日が所属する週のうち、最終日の日付を求める v2

Tags

10.11savvy (1101) 10.12savvy (1242) 10.13savvy (1391) 10.14savvy (587) 10.15savvy (440) 11.0savvy (283) 12.0savvy (212) 13.0savvy (204) 14.0savvy (159) 15.0savvy (173) 26.0savvy (53) CotEditor (68) Finder (53) Keynote (123) 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 (80) Pages (58) Safari (45) Script Editor (28) WKUserContentController (21) WKUserScript (20) WKWebView (23) WKWebViewConfiguration (22)

カテゴリー

  • 2D Bin Packing
  • 3D
  • AirDrop
  • AirPlay
  • Animation
  • Apple Inteligence
  • 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
  • NFC
  • 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
  • Spaces
  • Spellchecker
  • Spotlight
  • SVG
  • Swift
  • System
  • Tag
  • Telephony
  • Text
  • Text to Speech
  • timezone
  • Tools
  • Update
  • URL
  • UTI
  • Web Contents Control
  • WiFi
  • XML
  • XML-RPC
  • イベント(Event)
  • 未分類

アーカイブ

  • 2026年10月
  • 2026年9月
  • 2026年8月
  • 2026年7月
  • 2026年6月
  • 2026年5月
  • 2026年3月
  • 2026年2月
  • 2026年1月
  • 2025年12月
  • 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