Pythonista Ver.3.2

Pythonista 3がアップデート。更新内容をチェックした時のメモをざっくりとまとめました。

f-stringsをサポート

Python3.5から3.6.1になってf-stringsが使えるようになりました。こんな感じ。

user_name = 'hal'
print(f'hello {user_name}')

ファイル周りのアップデート

今回のアップデートで1番目立つのがファイル管理周り。

  • iCloudのサポート
  • 他アプリのファイルを開ける
  • iOS11のドラッグ&ドロップに対応
  • Open inでPythonファイルをインポート
  • ファイル検索はサブフォルダも対象に
  • ファイル・フォルダのお気に入り登録

iCloudサポートにより、ようやくデフォルトで同期機能が実装されました。一々ファイルを受け渡すことなくシームレスに編集できるのも便利です。

Working Copyからプロジェクトを開いてPythonistaで編集できるのがかなり良い。

コンソールのUI変更

コピーやPythonのバージョン切替がプルダウンメニューから選べるようになりました。

ドキュメントの改善

ドキュメントのあいまい検索に対応。未収録だったモジュールの簡単な説明と公式へのリンクも追加されています。

エディタ周りの変更

ツールメニューのConvert TabsがReformat Codeに名称変更。内容も機能強化されています。タブだけでなくコーディングスタイルを選んで反映できるようになりました。

読み取り専用のファイルはロックアイコンがついてわかりやすくなりました。これまではファイル名を()で囲って区別していた。

コメントがファイル名タップでポップアップするアウトライン表示に追加されると書いてあるけどよくわからない。

insert assetボタンが上部メニューから編集画面右下に変更された。以前あったタブボタンは上部メニューへ移動。

URLスキーム

新たにexecパラメータが追加されました。エンコードしたコードそのものを指定して使います。

pythonista3://?exec=%23!%20python3%0A%23%20coding:%20utf-8%0Aimport%20console%0A%0Aconsole.hud_alert%28%27%E3%83%86%E3%82%B9%E3%83%88%27,%20%27success%27,%202.0%29%0A

怖いなーと思ったら実行前にちゃんと確認画面が表示されるようになっていた。そのままファイル保存できたらいいのに。

このURLはツールメニューのShareから作成する事もできます。

もう一つrootパラメータが追加。iCloudに対応したのでicloud|localを指定して使います。デフォルトはlocal。

ビルトインモジュールの変更

arrow、openpyxlモジュールが追加されました。arrowは日付や時刻関連。openpyxlはExcel操作系。

その他既存モジュールに追加変更あり。詳しくはドキュメントを。

dialogs.pick_documentで他アプリのファイルパスを取得できるようになっています。

editor.open_file(dialogs.pick_document())

あとがき

今回の目玉はファイルアプリ対応。とりわけiCloudの対応ですね。これまでDropbox APIを使って同期やバックアップをしていた人が多かったと思いますが、ようやくデフォルトで同期機能が実装されました。

外部ファイルは履歴が残るので次からは簡単に開いて編集できます。

Safariの共有からコードを実行した時に、appex.get_url等の挙動がおかしい気がしますが、よく調べていないので新年へ持ち越し。公式フォーラムを見るとバグがいくつかあるようなのでその内アップデートがあるのでしょう。

広告

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

あとがき

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