Pythonista 3でフォトライブラリの読み書き

Pythonista 3photosモジュールに変更があり、いくつかの関数が廃止予定になっています。結構前の話ですが最近気付きました。

具体的にはphotos.pick_image()photos.save_image()等が該当します。当然代替方法はあるので、それらを使ったサンプル、というか練習で書いたものを載せておきます。

広告

iTunes Search APIでサイズ別にアイコン画像を取得できなくなった

のでメモ。軽く検証しただけなので正確とは限りません。

問題

Search APIで取得していた100x100px等のアイコン画像が取得できなくなった。これまでのようにURLを書き換えても404になり、サーバ上に存在しない。この問題は新規アプリや、最近更新されたアプリに限定されます。アップデート前まではあったのに、アプデ後は無くなっている。DraftsWorkflowDropboxにも無い。

結論

無い。残念。これまでのやり方は使えなくなりました。

調べた結果、新規や、最近更新されたアプリのほとんどは、アイコン画像がartworkUrl60・512しか存在しない。サムネイル用の60(120x120px)とオリジナルの512(1024x1024px)の2種類。100もあるかもしれませんが、中身は512と同じです。

この変更は最近始まったもののようで、現在は過渡期にあります。以前はartworkUrl60に57x57pxの画像がセットされていて、更新の無いアプリは全てこのままです。

解決

今後はartworkUrl60を使います。画像の解像度は検索時に読み込んで取得。これまでより多少時間はかかるけど仕方ないでしょう。

実際は他のサイズの画像もある

何なんだという話ですが、あるにはあります。確認しているのは100x100pxと175x175pxのサイズ。おそらく他にもあるのでしょう。いくつかはiTunes Storeのプレビューページで使われています。

Search APIを元にこれらの画像を取得しようと思うと少し面倒です。試しにPythonistaで175x175pxのiPhoneアプリのアイコンを保存するスクリプトを書いたので参考にどうぞ。

こんな感じで処理しています。通信が必要なのは1,3,4です。

  1. Search APIで検索してアプリURLを取得
  2. 検索結果からアプリを選択
  3. iTunesプレビューページをスクレイピングしてアイコンURLを取得
  4. アイコン画像をダウンロード
  5. カメラロールに保存

AppHtml的な用途なら3番までをやる必要があるのですが、この画像はアップデートごとにファイル名やパスが変わる可能性があるし、いつまで保存されているかもわかりません。

あとがき

多少面倒ですが、イレギュラーな使い方なのでこういう手間は今後もあるでしょう。上にも書いた通り2種類の画像をそのまま使う事を考えてツールを修正しようと思います。

search_link Ver.1.2

ファイルだけ更新してブログのエントリを公開し忘れていた。

Ver.1.2 更新内容

  • 設定の外出し
  • iTunesのアフィリエイトリンクに対応
  • カスタム検索に対応

search_linkについては以下の記事をどうぞ。iOSのPythonistaEditorial、それとMac用があります。俺のPython勉強用プロジェクトです。

設定の外出し

設定関連を外部ファイルのsearch_link_settings.iniから読み込むようにしました。ソースから書き換え部分を探すよりは楽で安全になったのではないかと思います。
ウェブ検索に必要なBing Search APIのAPI KEYも[Bing_Search_API_KEY]から読み込むようになりました。

iTunesのアフィリエイトリンクに対応

search_link_settings.iniに設定項目があります。[iTs_search_settings]のaffiliateの値を書き換えて下さい。使わない場合は初期値のaffiliateのままにしておいて下さい。

カスタム検索に対応

search_link_settings.iniの[web_search]に検索種 = 検索語の形式で追加して下さい。サンプルに4つほど登録してあります。削除しても構いません。
特定のサイト検索ならGoogleを使いたい所ですが、そこはまた考えます。BingはGoogleに比べてクロールが遅いのでサイト検索はそれほど役に立たないかもしれません。Wikipediaぐらい大きなサイトなら十分使えますが。

インストール

既存のsearch_link.pyはもういらないので削除するかリネームして下さい。上書きはしないようになっています。その内インストールスクリプトで上手いこと処理するようにします。
インストールはコンソールで以下のコードを実行して下さい。貼り付けてエンターでOKです。

MacはRequests、Beautiful Soup 4、bingpyモジュールが必要です。

Pythonista

import requests; exec requests.get('https://dl.dropboxusercontent.com/u/151393/Utility/search_link/search_link_for_pythonista_installer.py').content

Editorial

import requests; exec requests.get('https://dl.dropboxusercontent.com/u/151393/Utility/search_link/search_link_for_Editorial_installer.py').content

Mac

import urllib2; exec urllib2.urlopen('https://dl.dropboxusercontent.com/u/151393/Utility/search_link/search_link_for_Mac_installer.py').read()

今後の予定

  • 機能追加
  • リンクの書き出し形式を選べるようにする
  • Python3でも動くようにする
  • Mac版の更新を一時停止

書出形式の選択はかなり大掛かりな変更になってしまうので、とりあえずsearch_linkが一応の完成をみてから取り掛かります。ほぼ書き直しになるのでVer.2になるでしょう。Python3で動くようにするのもこのタイミングです。俺がPython3でもコードが書けるようになりたいだけなんですが。PythonistaもEditorialも2.7のままでしょうし。

Mac版はもう十分なので更新を一時停止します。Macはリサーチ系の機能を追加して使うよりも隣にブラウザを開いておいた方が使いやすかったりするので。Mac向けにやりたい事は他にたくさんあるのでそっちをやります。

なのでまずはどんどん機能追加していこうと思います。現状ブログ向けに偏っているのを、普段の文章書きにも便利に使えるようにしたい。

あとがき

今回目指したのは設定を簡単に追加できるようにする事です。例えば[iTs_search_type]アイフォーン = iphoneと追加すれば、アイフォーン アプリ名でiPhoneアプリを検索できます。GUIこそありませんが、これぐらい簡単なら誰でも使えるのではないかと思っています。

search_link – 検索結果をMarkdown形式で取得するPythonスクリプト

これは何?

SearchLinkというMac用のサービスがあります。かなりお気に入りで愛用していました。サービスの中身はRubyで書かれているのですが、正直さっぱりわからない。

それでも多少調べて改造したりしていたのですが、前回のアップデートで大幅な変更があり、いよいよ何が書いてあるのかわからなくなってきました。まあ1つずつ調べたらいいんですが。

そこで自分が使う機能だけピックアップしてPythonで似たものを作ってみました。という事で、search_linkはSearchLinkの劣化コピー版です。しかも独自仕様。

できること

  • ウェブ検索(Bing Search API)
  • URLからタイトルを取得
  • iTunes Store検索
    • iPhoneアプリ
    • iPadアプリ
    • Macアプリ
    • 映画
    • 音楽(アーティスト、アルバム、曲)
    • ポッドキャスト
    • 書籍

これらを検索して、1番目の結果をMarkdown形式のリンクにして取得します。デモ用に動画を撮影したのでどうぞ。


search_link Demo

使い方

基本的に検索種 検索語の形式で検索します。間は半角か全角スペース。大文字小文字は問いません。例えばmac marked 2だとMac App Storeのmarked 2を検索します。検索結果はこう。

[Marked 2](https://itunes.apple.com/jp/app/marked-2/id890031187?mt=12&uo=4)

titleはURLからタイトルを取得します。例えばこのブログならタイトル https://halspg.wordpress.com/と書いて、結果はこうなる。

[hal’s Playground | 興味のあるあれこれの雑記帳](https://halspg.wordpress.com/)

検索種を省略するとiPhoneアプリを検索します。例えばPythonistaで検索するとこう。

[Pythonista](https://itunes.apple.com/jp/app/pythonista/id528579881?mt=8&uo=4)

[ 検索種一覧 ]

Arguments Description
Web, 検索 Bingで検索します
Title, タイトル URLからタイトルを取得します
iPhone App StoreのiPhoneアプリを検索します。省略可能
iPad App StoreのiPadアプリを検索します
Mac Mac App StoreのMacアプリを検索します
Movie, 映画 iTunes Storeの映画を検索します
Artist, アーティスト iTunes Storeのアーティストを検索します
Album, アルバム iTunes Storeのアルバムを検索します
Song, ソング, 曲 iTunes Storeの曲を検索します
Podcast, ポッドキャスト iTunes StoreのPodcast番組を検索します
Book, 本, 書籍 iTunes Storeの書籍を検索します

インストール

Pythonista版とEditorial版、Macのサービスで使うのを想定したMac版があります。

web検索をつかうにはBing Search APIのAPIキーが必要になります。APIキーの取得については下に説明を書きました。

Pythonista版

コンソールに以下のコードを貼り付けて実行して下さい。

import requests; exec requests.get('https://dl.dropboxusercontent.com/u/151393/Utility/search_link/search_link_for_pythonista_installer.py').content

実行後、ルートにsearch_link.py、site-packagesフォルダにbing_api.pyが作成されていれば成功です。

Editorial版

コンソールに以下のコードを貼り付けて実行して下さい。

import requests; exec requests.get('https://dl.dropboxusercontent.com/u/151393/Utility/search_link/search_link_for_Editorial_installer.py').content

実行後内蔵ブラウザでワークフローの公開ページを開くのでインストール。pypi-modulesフォルダにbing_api.pyが作成されていれば成功です。

Mac版

Python2.7.9で動作を確認しています。Macのサービスに登録して使うのを想定しています。モジュールは標準以外だとrequests、Beautiful Soup 4、bingpyが必要です。

search_link.pyを保存してください。

多分Python3では動きません。printprint()にするだけで動いたりするんだろうか。環境作ってないので試せませんが。

一応インストール用ファイルも用意してあります。

import urllib2; exec urllib2.urlopen('https://dl.dropboxusercontent.com/u/151393/Utility/search_link/search_link_for_Mac_installer.py').read()

Bing Search APIキーの取得

以下から取得します。要Microsoftアカウント。無料で月5000回使えるようです。

今回Bing関連は全てこの記事を参考にしています。

今後の予定

  1. コード見直し
  2. ウェブ検索に個別のサイト検索を追加できるようにする
  3. 設定の外出し or 設定項目を一箇所にまとめる
  4. その他欲しい機能があれば追加
  5. Python3で動くようにする
  6. iTunesのアフィリエイトプログラムに対応させる
  7. リンクの書き出し形式を変更できるようにする

アフィリエイトリンク対応は必要かと思いましたが、使っていないのでいまいち仕様を把握できておらず、今回は省きました。わかる方はits_search()の書き出し部分に追記してください。

おまけ

1Writer – Note taking, writing app用のアクションを用意しました。Pythonista版のsearch_linkと連携します。

あとがき

とりあえずできたので公開します。やっぱりエディタと一体のEditorialはこの手のスクリプトと相性が良いですね。いかんせん安定せず落ちまくるので早くアップデートしてほしい。

[Link] 2015-03-02

One Tap Less | Taming the Prompt on Drafts 4.1.1

DraftsのPromptアクションの解説。英語ですが、画像だけでもかなりわかりやすいです。

One Tap Less | Aware of my Addiction with Tally 2.0.1

上と同じブログから。たばこを吸った本数をTallyでカウントして、日毎の本数を記録するワークフローを作っています。Tallyの活用例を初めて見た気がします。なるほどこう使えば十分役立ちますね。ウィジェットからカウント取れるし楽で良い。

タバコ吸わないのでコーヒーを飲んだ杯数でも記録してみようか。Tallyで数を取得して、IFTTT経由で日付と共にGoogle Docsのスプレッドシートに追記するとか。iWorkspaceでやっている日次処理に追加すればストレスにもならない、かもしれない。まあルーチンワークを記録するアプリは他にたくさんありますが。

iOS status bar cleaning one year later – All this

このブログでもよく使っているステータスバーを任意の画像に置き換えるPythonスクリプトがPythonista用モジュールになっていました。ルートやsite-packagesフォルダにCleanbar.pyとして保存すれば使えます。

最近よく使う処理をまとめた自分用モジュールを作り始めました。作りかけですがこんなの。使うかどうかわかりませんが、中々楽しい。

アプリ

domo ToDo2 (ToDo & カレンダー) Ver.1.0.0
カテゴリ: 仕事効率化, ユーティリティ
現在の価格: 100円(サイズ: 2.5MB)

カレンダー上でスケジュールとして管理するTodoアプリ、domo todoのリニューアル版。カレンダーと同期するものであって、iOSリマインダーとは連携しないアプリなので注意してください。

これを書いている現在リリースセール中です。昔愛用していたアプリなので懐かしくなってすぐに購入しました。

Photo

Twitterを見る限り、どうやら最小構成のリリースのようで、今後機能を追加していくとのことです。正直な話、DAYLINEやdomo Cueなんかはすぐに更新が止まってしまったので信用できません。が、期待はしています。何だかんだでこの人のアプリは使いやすいんですよ。

Workflow Ver.1.1

What’s New in Workflow 1.1

Workflow: Powerful Automation Made Simple

バージョン: 1.1
カテゴリ: 仕事効率化, ユーティリティ
現在の価格: 300円(サイズ: 22.9MB)
販売元: DeskConnect, Inc.
リリース日: 2014/12/11

iTunesで見る + iPhone/iPadの両方に対応

引用元:Workflow

New Features

  • Quickly run workflows from My Workflows by double tapping on them
  • Use the selected text from Safari as input to an action extension workflow
  • Actions to filter and get details of all the content on your device
  • Duplicate workflows to make your own versions
  • Create a custom home screen icon for your workflow using photos from your library
  • Now accessible for VoiceOver users
  • Added Apps section for easy discovery of actions that interact with your other apps
  • Added the ability to mark actions as favorites to quickly use them later
  • Improved the Workflow URL scheme — see documentation here
  • Improved overall responsiveness, speed, and launch time

その他かなりの数の追加・変更・修正があるので、詳しくはリンク先をどうぞ。紹介しきれないので、ざっと試して気に入った所をご紹介。

ダブルタップでワークフローを実行できるように

ワークフロー一覧からダブルタップで実行できるようになったようです。「ようです」というのは、上手く動かなかったから。ダブルタップしてもワークフローが開くだけ。連打してたら一回だけ実行できたのがなんとも。これができると楽で良いんですが。

Photo

Safariで選択したテキストを取得

前はGet Text from Inputを使わないといけなかったのかな。いまいち記憶が定かではありませんが。以下のように選択テキストを[Input]として使えるようになりました。

Photo

ワークフローの複製

ワークフロー一覧から編集、複製、削除操作ができるようになりました。個別の編集画面にも、共有メニューに複製ボタンが追加されています。

これができるとワークフローを作るのが楽になります。複製用のワークフローなんかもありますが、サーバにアップロードする必要がありました。

Photo

URLエンコード・デコード

待望の機能なんですが、一つ注意があります。

このエンコードはURIの予約文字をエンコードしません。JavaScriptで言う所のencodeURI()です。encodeURIComponent()ではありません。

Workflowで使うURLエンコードとしては予約文字までエンコードする方が使い道が多いと思うんですが、両方あるならともかく、なぜこっちだけなんだろうか。

Pocketアクション2種

新たにPocket用のアクションが追加されています。Pocketに追加と、Pocketの登録アイテムを取得するアクションの2つ。

試しに登録アイテムを取得してMarkdownリンクを作成するワークフローを作ってみました。検索やタグで絞り込めたり中々使えそう。

Dropbox上のファイルに追記

以前からあったアクションですが、バグ修正されて使えるようになりました。前は追記するファイルがDropboxのルートに無いとエラーになっていました。

Pythonistaスクリプトが実行できるように

これもバグ修正。URLを指定すれば前から使えていましたが、Run Scriptアクションでファイル名を指定して実行できるようになりました。

ただEditorialと違ってWorkflowに戻ってきてくれない。コードにコールバック機能を付けないといけないので、アップデート前と大差無し。Run Scriptの説明と動きが違うので、説明か挙動のどちらかがまだ間違っているようです。

短縮URLの展開

新たに追加されたExpand URLアクションで実行できるようになっています。これまではClean Links用のアクションが用意されていましたが、今回のアップデートで削除されています。

できるのは短縮URLの展開のみです。Clean Linksのようなutmトークンの削除機能はありません。

日付のフォーマットがカスタムできるように

これは嬉しい。

Photo

Day Oneエントリーを作成

Day Oneにエントリーを作成する専用アクションが追加されました。画像の添付もできます。アクションの組み合わせで以前からできましたが、簡単になったのは良いこと。

画像は[Input]に格納する必要があるので、テキストも書きたい場合は適当な変数を作って以下のようにすると写真+テキストのエントリーを作成できます。Take Photo→Edit Image→Create Day One Entryなんてやるのも良いですね。

TextTool連携

Transform Text with TextToolでTextToolと簡単に連携できるようになりました。URLエンコード(含予約文字)なんかはこれでやるのが一番早いかもしれません。

簡単なものはSplit Text→Repeat with Each→Combine Textなんかでできましたが、やっぱり専用アプリは楽で良いです。

登録済タイトルのワークフローをインポートする時の処理

置き換えるか名前を変更して登録するかを選べるようになっています。事故防止ですね。以前は問答無用で置き換えられてしまい、せっかく作ったワークフローが上書きされてしまいがっかりなんて事がありました。

Photo

あとがき

まだ挙動が微妙に不安定なのですが、前バージョンとは比べ物にならないほど快適です。作ったワークフローが増えてきたのでそろそろまとめページを作りたい。

2014年よく使ったアプリまとめ

そういえば去年書いたなと思い出したので今年も書きます。

Editorial

バージョン: 1.1.1
カテゴリ: 仕事効率化
現在の価格: 700円(サイズ: 38.6MB)
販売元: Ole Zorn
リリース日: 2013/08/15

iTunesで見る + iPhone/iPadの両方に対応

今年はやっぱりこれ。Pythonの開発実行環境を内蔵したテキストエディタアプリ。たくさん記事を書きました。

EditorialのWorkflowを連日作っていた頃はワールドカップ開催中で、日中欲しい機能をメモっておいて、夜中試合の合間に作るのが日課になっていました。

残念ながらiOS8には未対応でかなり不安定です。その為現在はメモ書きを他のアプリでやっています。

同開発元のPythonistaや、まだリリースされたばかりですが、それらと連携の取れるWorkflowも最近よく使っています。PythonistaはiOS8対応版が現在ベータリリースされていてTestFlightでテスト中。新機能より早く動作を安定させて欲しい。通信をするスクリプトを実行すると3回に1回は落ちます。

Pythonista Ver.1.5
カテゴリ: 仕事効率化, 教育
現在の価格: 700円(サイズ: 124.7MB)

Workflow: Powerful Automation Made Simple Ver.1.0.1
カテゴリ: 仕事効率化, ユーティリティ
現在の価格: 300円(サイズ: 17.8MB)

公開したワークフローは先日ツイートしたのが2つだけ。まだ人が作ったものを試すのが楽しい段階です。モジュール化してワークフローを繋げたりとか色々やりたい。基本的にソースを簡単に処理してエクスポートするだけのものなので、込み入った事は連携可能な外部アプリに任せる形になっています。

Drafts 4 – Quickly Capture Notes, Share Anywhere!

バージョン: 4.0.6
カテゴリ: 仕事効率化, ソーシャルネットワーキング
現在の価格: 1000円(サイズ: 10.1MB)
販売元: Agile Tortoise
リリース日: 2014/10/15

iTunesで見る + iPhone/iPadの両方に対応

去年一番使ったアプリDraftsのリニューアル版。別アプリとしてリリースされています。期待値が高すぎた為に、その制限の多さにがっかりする所もありました。なんだかんだとアクションを作っていったらやっぱり便利なアプリではあるのですが。

Draftsは以前からURL経由のアクション実行にパスワード制限をかけられたり、セキュリティ対策に気を使ってきました。考えてみればDrafts 4の制限は自然なことなのかもしれませんね。もしアクションのScriptから通信できたら個人情報を奪う事も可能です。便利な機能の裏で通信すれば気付かれる事も無いでしょう。App Storeと違って審査もありません。

EditorialがiOS8で不安定なので、現在はこれでメモ書きをしています。アクションは通信が使えないのでPythonistaに頼ることが多いです。そのPythonistaも不安定でストレスが溜まる。

スクリプトで処理できるメモアプリというのが少しずつ増えてきています。日本だとDraftPadの後継アプリのTextwellがある。

あとは1Writerが最近のアップデートでアクションにJavaScriptを使えるようになりました。UIまで作れるし、XMLHttpRequest的なものも用意されていて面白そうです。Drafts 4にはできないアクション実行後に範囲選択されたテキストを置換することも可能。独自拡張でTodo機能も付いています。ほとんど使っていないので使用感は書けませんが中々面白そうです。

拡張キーボードからアクションの実行ができるので、面倒なアクション実行までの操作も気になりません。アクションから内蔵ブラウザにアクセスする事もできます。Drafts 4みたいに公式サイトにアクションディレクトリもある。あまり賑わってませんが。

Editorialのアップデートがまだ先なのは目に見えているので移行するのもありかなと。独自拡張のオブジェクトがあってアクションのベタ移植ができず、移行が面倒ではあります。

その他定番アプリ

Fantastical 2 for iPhone – Calendar and Reminders Ver.2.2.2
カテゴリ: 仕事効率化, ビジネス
現在の価格: 500円(サイズ: 20.9MB)

去年に引き続きカレンダーアプリはこれ。今年も色んなアプリがリリースされたと思うのですが、変わることはありませんでした。アプリの連携に組み込んでいるので変え難いというのもありますが。URL経由で連続登録が便利です。

自然言語入力できるものが増えたので選択肢は広がりましたね。Calendars 5はかなりお勧めです。

Due 〜 リマインダー、タイマー、アラーム Ver.1.10.5
カテゴリ: 仕事効率化, ユーティリティ
現在の価格: 500円(サイズ: 21.8MB)

こちらも去年から引き続き。リマインダーアプリです。今ではEditorialでやるようになったタスク管理。Workflowを使ってタスクから登録しています。繰り返しのタスクに対応していないので作りたい気もする。一度設定したらもう触る事は無いので優先度はかなり低いですが。

タスクの実行時に必要な処理を行う為の仕組みを作るというのが最近やりたい事です。例えば毎晩日記を書くなら、タスクを実行すると天気やその日の主な出来事等をネットから取得して、日記アプリを起動して貼り付けるとか。終了時には所要時間を記録できるようにしてもいいですね。日記書きませんが。

こういうアプリは探せばあるんでしょうが、自分で作るのが楽しかったりもします。

Unit Kayアプリ

去年も書きましたがUnit Kayさんのアプリが好きです。MyShortcuts+ViewerのTodayウィジェット対応からのMyMemoへの転身なんかは頼もしい限りでした。iWorkspaceやMyFindを含め、残念ながら今後のアップデートは期待薄ですが今後も使える限りは使います。新規アプリとしてリリースしたら案外簡単に審査通ったりして。

MyMemo – メモウィジェット Ver.1.0
カテゴリ: ユーティリティ, 仕事効率化
現在の価格: 100円(サイズ: 444KB)

Todayウィジェットにメモを表示するアプリ。HTMLが使えるのでやりたい放題。重宝しています。Appleがどう言おうが、ずっと以前からこういう使い方をiPhoneでしたかったんですよ俺は。

MyFind – 大辞林/ウィズダム/Oxford Ver.1.3
カテゴリ: 辞書/辞典/その他, 仕事効率化
現在の価格: 無料(サイズ: 1.5MB)

検索アプリ。もちろんただの検索アプリではありません。iOS8では多少の不具合がありますが十分に使えます。

iWorkspace Ver.1.9
カテゴリ: ユーティリティ, 仕事効率化
現在の価格: 300円(サイズ: 840KB)

ランチャーアプリ。もちろんただアプリを起動するだけではありません。通知センターを使った擬似的なコールバックはアプリ連携の選択肢を大幅に増やしてくれました。アプリの連続起動は素晴らしいアイデアです。

あとがき

今年はEditorialとDrafts 4がメインでした。欲しいものをPythonで作れるようになったのが成果です。効率はともかく、とりあえず動くものが書けるようになった。

App Storeの審査基準の迷走はまだ続いています。削除要請を受けてTodayウィジェットを削除したDrafts 4が翌日新たなウィジェットを搭載してアップデートしたりで、もうよくわかりません。以前との違いは、単にアプリを起動するopenボタンが無くなったのと、最近編集したドラフトが3件開けるようになった所。単にアプリを起動する機能が禁止になるだけなんだろうか。drafts4://drafts4://createにそこまで違いがあるとは思えませんが。

来年はまずWorkflow1Writerを快適に使えるようにしようかと思っています。EditorialやPythonistaのアップデートがあればそちらに戻るでしょう。