Pythonista

iOS 앱 중에 Pythonista라고 있습니다. 아이패드, 아이폰에서 파이썬(Python)을 사용할 수 있게 해주는 거죠. 가격은 좀 되지만 아이패드에서 파이썬을 네이티브하게 쓸수 있다는 강점이 큽니다. 그런데 쓰다보면 좀 아쉬운게 있습니다. 파이썬의 강점은 그 수많은 라이브러리를 활용할수 있어야 하는건데, Pythonista는 pip을 통한 라이브러리 설치가 안됩니다. numpy 같은 기본적인 라이브러리들은 기본 설치 되어 있기는 하지만 왠지 반쪽 짜리는 느낌을 지울수 없습니다. 돈이 아깝습니다.

Stash

하지만 세상엔 똑똑하신분들이 참 많습니다. Pythonista에서 Shell을 이용해 pip 명령어로 pypi 라이브러리들을 설치할 수 있는 스크립트를 만들어냈습니다.

Github 주소: https://github.com/ywangd/stash

 

GitHub - ywangd/stash: StaSh - Shell for Pythonista

StaSh - Shell for Pythonista. Contribute to ywangd/stash development by creating an account on GitHub.

github.com

설치

사용법은 간단합니다. Pythonista 실행창이나 스크립트 파일이 해당 명령어를 입력해 실행 시켜주면 됩니다.

import requests as r; exec(r.get('https://bit.ly/get-stash').content)

그러면 아래 사진 처럼 launch_stash.py 파일이 생성된 것을 확인 할 수 있다. 이걸로 준비 끝입니다. 간단하죠?

PIP 실행

launch_statsh.py가 생성된 것을 확인 했으면 이제 Pythonista를 한번 재실행 시켜줍니다. 바로 사용은 안됩니다. 앱을 재 실행한 후 launch_stash.py를 실행시켜 주면 아래와 같이 Shell 화면이 나옵니다.

이제 여기서 pip 명령어를 사용할 수 있습니다. beautifulsoup4를 한번 설치해 보겠습니다.

pip install beautifulsoup4

설치된 라이브러리는 좌측 메뉴 - Python Modules - site-package-3 폴더에 확인할 수 있습니다.

아이패드에서의 활용

이제 다양한 라이브러리들도 설치할 수 있게 되었으니 파이썬을 활용할 방안을 생각해봤습니다. 아이패드로 웹서핑을 자주 하면서 마음에 드는 짤들은 수집할 때가 많습니다. 근데 일일히 사진을 꾸욱~ 클릭하면서 이미지 저장을 클릭하는게 여간 귀찮은게 아닙니다. 그냥 휘리리릭~ 본문에 있는 짤들을 저장할 수 있게 할수 없을까요? 여기서 Pythonista를 활용 해보겠습니다.

import appex
if not appex.is_running_extension():
	return   
pageInfo = appex.get_web_page_info()
if not pageInfo:
	return

Pythonista는 iOS에서 공유/확장 기능에 접근할 수 있는 appex 라이브러리를 지원합니다. is_running_extension는 현재 공유/확장 기능이 실행 중인지를 체크하고, get_web_page_info는 현재 열려있는 웹페이지의 정보를 얻어올 수 있습니다.

from bs4 import BeautifulSoup
pageInfo = appex.get_web_page_info()
soup = BeautifulSoup(pageInfo['html'], 'html5lib')

위와 같이 얻어온 웹페이지의 정보에서 'html' 키를 이용하면 html 소스를 얻어 올 수 있습니다. 이걸 앞서 설치한 BeautifulSoup를 통해 파싱할 수 있습니다. 이미지를 저장하기 위한 준비는 끝났습니다.

# save to photo album
# https://forum.omz-software.com/topic/3889/adding-an-image-to-my-own-album-in-photos-how/2
def add_to_album(image_path, album_name):
	try:
    	album = [a for a in photos.get_albums() if a.title == album_name][0]
	except IndexError:
		album = photos.create_album(album_name)
	asset = photos.create_image_asset(image_path)
	album.add_assets([asset])


imgs = soup.find_all('img')
for i in imgs:
	imgUrl = urlparse(i['src'])
    with request.urlopen(imgUrl.geturl()) as res:
		imgData = res.read()
		with Image.open(BytesIO(imgData)) as img:
			img.save(filename)
            add_to_album(filename, 'Pythonista')

img 태그를 검색한 다음 해당 이미지의 src 즉, url를 얻어내서 다운로드 한 다음, Pythonista 이름의 포토 앨범을 생성해 저장합니다. 여기서 추가로 원하는 이미지 사이즈등을 필터링 해주면 좋습니다. 위 코드대로 실행하면 웹사이트의 불필요한 아이콘들까지 전부 저장 되게 됩니다.

공유 확장 내보내기

이제 스크립트는 준비 됐고, 이걸 아이패드 사파리에서 사용할 수 있게 해야 합니다. Pythonista에서는 이런 기능까지 간편하게 지원합니다.

Pythonista 편집기 화면에서 오른쪽 상단의 도구 모양을 클릭하고, Shortcuts 메뉴를 선택합니다. 이 스크립트는 공유 확장 기능에서 사용될 것이므로, Share Extension 메뉴를 선택합니다. 이제 적당한 아이콘을 골라 우리가 작성한 파이썬 스크립트 파일을 선택해주면 끝입니다.

사파리에서 짤 저장 실행하기

모든 준비는 끝났습니다. 이제 실제로 사용을 해봅시다.

사파리에서 공유 버튼을 눌러보면 Run Pythonista Script 메뉴가 있습니다. 이 메뉴를 선택하면 위에서 내보내기한 스크립트 아이콘이 있습니다. 이것을 클릭해주면 우리가 만든 파이썬 스크립트가 실행되며 현재 보고 있는 웹페이지의 이미지들을 저장하게 됩니다.

 

끝!

+ Recent posts