Pythonistaでホーム画面にショートカットを作るスクリプトをpython3で動作するようにしました。

**Pythonista3**にはスクリプトをホーム画面にアイコンとして登録することができますが、僕の環境ではiOS11にしてからできなくなってしまいました。

例えば**Safari**から**Pythonista3**を起動して**sample.py**を実行したければブックマークを編集して`pythonista://sample.py?action=run`と書き換えれば可能です。

**URLスキーム**と言い特定のURLの処理を担当するアプリが決まってるので**Safari**の**［ホーム画面へ追加］**を利用して**Pythinista**のスクリプトのショートカットをホーム画面へアイコン付きで登録する方法があります。

しかしその方法は**アイコン画像のURL**を用意する必要があるので少し面倒でした。

そこで見つけたのが以下のスクリプトで、**Pythonista3の作者**である[Ole Zorn](https://gist.github.com/omz)さんが作ってくれたものです。
[[ShortcutGenerator.py](https://gist.github.com/omz/7870550)]

僕は**python3**に慣れてるので**python2**のスクリプトだと切り替えの手間がかかるので**python3**で動作してもらえるとありがたいのですが、残念ながら僕の環境では**python2**でしか動作しませんでした。

とりあえずエラーの出る箇所をひとつずつ修正してたら**python3**で動作するようになりました。

~~~python:ShortcutGenerator3.py
# 動作確認 python3.5
# このスクリプトはあなたのホーム画面に "Webclip"ショートカットを追加します。
# このショートカットを使用して、フルスクリーンモードでWebページを開くことができます。
# またはカスタムURL（サードパーティアプリなど）を起動することができます。
# タイトル、URL、アイコン（カメラロールから）を尋ねられます。

import plistlib
from http.server import HTTPServer,BaseHTTPRequestHandler
import webbrowser
import uuid
from io import BytesIO
import Image
import photos
import notification
import console


class ConfigProfileHandler(BaseHTTPRequestHandler):
	config = None
	def do_GET(s):
		s.send_response(200)
		s.send_header('Content-Type', 'application/x-apple-aspen-config')
		s.end_headers()
		
		plist_string = plistlib.writePlistToBytes(ConfigProfileHandler.config)
		
		s.wfile.write(plist_string)
	def log_message(self, format, *args):
		pass

def run_server(config):
	ConfigProfileHandler.config = config
	server_address = ('', 0)
	
	httpd = HTTPServer(server_address, ConfigProfileHandler)
	
	sa = httpd.socket.getsockname()
	webbrowser.open('safari-http://localhost:' + str(sa[1]))
	httpd.handle_request()
	notification.schedule('Tap "Install" to add the shortcut to your homescreen.', 1.0)

def main():
	console.alert('ショートカットジェネレータ', 'このスクリプトはあなたのホーム画面に "Webclip"ショートカットを追加します。このショートカットを使用して、フルスクリーンモードでWebページを開くか、カスタムURL（サードパーティアプリなど）を起動できます。タイトル、URL、アイコン（あなたのカメラロールから）を求められます。', '続ける')
	label = console.input_alert('ショートカットタイトル', 'ホームスクリーンアイコンの短いタイトルを入力してください.', '', '続ける')
	if not label:
		return
	url = console.input_alert('ショートカットURL','ショートカットを起動する完全なURLを入力してください。', '', '続ける')
	if not url:
		return
	icon = photos.pick_image()
	if not icon:
		return
	console.show_activity('構成プロファイルの準備中...')
	data_buffer = BytesIO()
	icon.save(data_buffer, 'PNG')
	icon_data = data_buffer.getvalue()
	unique_id = uuid.uuid4().urn[9:].upper()
	config = {'PayloadContent': [{'FullScreen': True,
            'Icon': plistlib.Data(icon_data), 'IsRemovable': True,
            'Label': label, 'PayloadDescription': 'Configures Web Clip', 
            'PayloadDisplayName': label,
            'PayloadIdentifier': 'com.omz-software.shortcut.' + unique_id, 
            'PayloadOrganization': 'omz:software', 
            'PayloadType': 'com.apple.webClip.managed',
            'PayloadUUID': unique_id, 'PayloadVersion': 1,
            'Precomposed': True, 'URL': url}], 
            'PayloadDescription': label,
            'PayloadDisplayName': label + ' (Shortcut)', 
            'PayloadIdentifier': 'com.omz-software.shortcut.' + unique_id,
            'PayloadOrganization': 'omz:software', 
            'PayloadRemovalDisallowed': False, 'PayloadType': 
            'Configuration', 'PayloadUUID': unique_id, 'PayloadVersion': 1}
	console.hide_activity()
	run_server(config)

if __name__ ==  '__main__':
	main()
~~~

でも、こういうのって作者に無断で載っけても良いものなのかわかりませんが、ダメなら削除しますので、わかる方は教えて下さい。