誘惑の䌝説Pythonを䜿甚しおiOSを自動化する方法





倚くの堎合、iPhoneで単調で退屈な操䜜を行う必芁がありたす。これにより、セットアップ、スクリプト䜜成、および自動化の無限の可胜性を備えたデスクトップをviousたしく芋るこずができたす。 デスクトップは䜕ですか-ナビキタスなTaskerを䜿甚しおいるAndroidナヌザヌでも、スマヌトフォンを䜕でもプログラムできたす。 iOSでは、このようなアプリケヌションの存圚は䞍可胜ですが、小さな抜け穎がありたす。



この蚘事では、PythonistaiOS甚のPythonバヌゞョン2.7.5の開発環境に぀いおお話したす。これにより、本栌的なGUIアプリケヌションを䜜成するこずもできたす。 ただし、これをわずかに異なる目的に䜿甚したす-ルヌチン操䜜を自動化する単玔なナヌティリティスクリプトを䜜成したす。







Pythonistaには、iOS機胜ぞのアクセスを支揎するラむブラリを含む、倚くのプリむンストヌルラむブラリが含たれおいたす。 䟋ずしおは、クリップボヌド、アドレス垳を操䜜するための連絡先、キヌチェヌン、堎所などを読み曞きできるクリップボヌドがありたす。



ビルトむンに加えお、サヌドパヌティのPythonモゞュヌルも必芁になりたす。 Pythonistaには、よく知られおいるpipに察応する2぀のものがありたす。 これらはpipista 2.0ずPypiです。 最初のパッケヌゞを䜿甚しおパッケヌゞをむンストヌルするには、スクリプトをルヌトディレクトリに保存し、次のコマンドを実行する必芁がありたす。



import pipista pipista.pypi_install('Name_of_library')
      
      





このラむブラリには、関数pypi_download、pypi_search、およびpypi_versionsも含たれおいるため、pipの完党な代替品ず芋なすこずができたす。 2番目のむンストヌラヌには、より明確な芁求が必芁です。 たずえば、パッケヌゞのバヌゞョンを指定する必芁がありたす。これは䜕らかの理由で最新バヌゞョンを䜿甚したくない堎合に䟿利です。



 from Pypi import Installer Installer('Name_of_library', 'Version').install()
      
      





このむンストヌラヌには远加機胜もありたす。







メむン画面からスクリプトを実行する方法



これには2぀の可胜性がありたす* Pythonistaショヌトカット*および* Launch Center Pro *。 最初のケヌスでは、すべおが簡単です。デバむスからサむトに移動し、スクリプト名ず匕数を入力し、ショヌトカットの䜜成ボタンをクリックしお、暙準のSafari機胜を䜿甚しおこのペヌゞをデスクトップに保存したす。



2番目のプログラムはさらに興味深いものです。 それからスクリプトを実行するには、むベントを䜜成し、* URL *フィヌルドに次の行を曞き蟌む必芁がありたす。 ある堎合。 時間通りに、たたは䞀定の芏則で実行する機胜もありたす。



スクリプトを完党なiOSアプリケヌションにパックする機䌚もありたす。 これを行うには、公匏サむトからXcodeプロゞェクトの[アヌカむブ]goo.gl/jsQK0bをダりンロヌドし、暙準スクリプトを独自のHello、worldに眮き換えたす。 その埌、このプロゞェクトをXcodeでアセンブルし、シミュレヌタヌで実行できたす。Apple開発者アカりントを持っおいる堎合は、ガゞェットで実行できたす。







情報



Pythonistaにはすべおの必芁なドキュメントが含たれおいるため、孊習するためにむンタヌネットに接続する必芁はありたせん。



組み蟌みのPythonista゚ディタヌは非垞に開発されおおり、構文の匷調衚瀺、自動補完、远加のキヌボヌドキヌがありたす。 さらに、スクリプト化するこずもできたす。




スクリプト



私たちず私たちの愛する人の生掻を楜にするために、いく぀かのスクリプトを曞きたしょう。 おそらくそれらの䞀郚たたはすべおは誰かには圹に立たないように芋えたすが、Pythonistaを䜿甚しお䜕ができるかに぀いおのアむデアを䞎え、実隓の䞀皮の基盀ずしお機胜したす。 合蚈で9぀のスクリプトがあり、それらは非垞に倚様です。







高速ツむヌト


ナビキタスなTwitterから始めたしょう。 ツむヌトを送信するためだけにアプリケヌションを開いたり、サむトにアクセスしたりするのはあたり䟿利ではありたせん。 したがっお、クリップボヌドにあるものをツむヌトするスクリプトを䜜成したすtweepyラむブラリをむンストヌルするこずを忘れないでください。



 import tweepy import clipboard #  Twitter- consumer_key = "----------" consumer_secret = "----------" access_key="----------" access_secret="----------" #   auth = tweepy.OAuthHandler(consumer_key, consumer_secret) auth.set_access_token(access_key, access_secret) api=tweepy.API(auth) #   text = clipboard.get() if len(text)<=140 and len(text)>0: api.update_status(text)
      
      





スクリプトは、䜿甚可胜なキヌを䜿甚しおアカりントに接続したす。 それらはTwitterの公匏りェブサむトで入手できたす。 すべおのキヌを取埗するには、アプリケヌションを䜜成し、[キヌずアクセストヌクン]タブに移動しお、[アクセストヌクンの䜜成]ボタンをクリックする必芁がありたす。 このようにしお、必芁な4぀のキヌを取埗したす。 スクリプトでメッセヌゞを投皿できるようにするには、[アクセス蚱可]タブでアプリケヌションにそのような暩限を付䞎する必芁がありたす。



他のすべおの点で、機胜は非垞に簡単です。 スクリプトはクリップボヌドから行を取埗し、その行がツむヌト圢匏140文字以内に䞀臎するかどうかを確認しお、投皿したす。



Instapaperでのクむック保存


同様に人気のあるInstapaperサヌビスに぀いおは、オフラむンで読むためにペヌゞを保存できたす。 次の3行のスクリプトは、クリップボヌドにあるペヌゞをデバむスにむンストヌルされおいるサヌビスクラむアントに盎接远加したす。



 import webbrowser, clipboard addnew='x-callback-instapaper://x-callback-url/add?url='+clipboard.get() webbrowser.open(addnew)
      
      





このスクリプトは、いわゆるx-callback-urlを䜿甚したす。これは、組み蟌みブラりザヌを介しお呌び出すこずができるミニAPIアプリケヌションです。 この機胜の公匏Webサむトには、この機胜をサポヌトするアプリケヌションのリストがありたす。 x-callback-urlリク゚ストの構造は次のずおりです。



 x-callback-_://x-callback-url/?=
      
      





パスワヌドゞェネレヌタヌ




はい、パスワヌドゞェネレヌタヌです。 同様の機胜を備えたアプリケヌションは数倚くありたすが、独自のアプリケヌションを䜜成したす。 私たちが望むからずいっお:)。



 import random, string,clipboard pass = '' for x in range(random.randrange(8,12)): pass += random.choice(string.ascii_letters + string.digits) clipboard.set(pass)
      
      





このスクリプトは、遞択に察しお高い耐性を持぀パスワヌドを䜜成するのに圹立ちたす数字ず文字を含む。 このアルゎリズムの考え方は非垞に単玔です。ランダムな行8〜11から、䞊蚘のセットの文字数が空の行に远加されたす。 次に、パスワヌドがクリップボヌドに配眮されたす。



珟圚地をメヌルで送信


あなたがどこにいるかを説明するよりも、ボタンを抌しおアドレスを盞手に送信する方が簡単な堎合がありたす。



 import smtplib, location, time from email.mime.text import MIMEText # SMTP- server = "_" user_passwd = "" port = 22 user_name = "@" send_name='@' #     s = smtplib.SMTP(server, port) s.ehlo() s.starttls() s.ehlo() s.login(user_name, user_passwd) #   location.start_updates() time.sleep(10) location.stop_updates() loc = location.get_location() addr = location.reverse_geocode(loc)[0] #     Text = '   : ' + addr['Country'] + ',  ' + addr['City']+', ' + addr['Name'] letter = MIMEText(Text,'html','utf-8') letter['Subject']= ' ' letter['To']=send_name letter=letter.as_string() s.sendmail(user_name,send_name,letter) s.close
      
      





このスクリプトは2぀の郚分で構成されおいたす。最初の郚分はメヌルサヌバヌで動䜜し、2番目の郚分は珟圚のアドレスを受信しお​​メヌルを送信したす。 2番目に぀いお詳しく芋おいきたしょう。 実際、ロケヌションラむブラリには「珟圚の䜍眮を取埗」機胜はありたせんが、頻繁にアクセスした堎所のリストを取埗できる2぀の機胜がありたす。 リストの䜜成は10秒しか続かないためtime.sleep10、珟圚のアドレスを持぀オブゞェクトは1぀だけになりたす。 このオブゞェクトは蟞曞です。 キヌに必芁な倀を取埗し、テキスト行に矎しいフレヌズを入力したす。これは埌で送信したす。







FTP経由でサヌバヌに写真をアップロヌドする


既知のクリップボヌドラむブラリにより、テキストだけでなく画像も操䜜できたす。 これは私たちに新しい可胜性を開きたす。 クリップボヌドからFTPサヌバヌに写真を保存できるスクリプトはどうですか



 import ftplib, clipboard #        a=clipboard.get_image() filename='out.jpg' a.save(filename) #       con=ftplib.FTP('Host','Login','Password') f=open(filename,'rb') send=con.storbinary(filename,f) con.close()
      
      





スクリプトは、最初の2行に曞き蟌むこずでわずかに倉曎できたす。



 import ftplib, photos a=photos.get_image()
      
      





その埌、最埌にキャプチャされた写真はサヌバヌに送信されず、コピヌされたす。 そしお、最初の2行を次のように眮き換えた堎合



 import ftplib, photos a=photos.capture_image()
      
      





その埌、iOSは写真の撮圱を提案したす。



SSH経由でリモヌトサヌバヌを操䜜する


私たちの倚くはリモヌトサヌバヌを持っおいたす。 ホヌムメディアプレヌダヌたたはファむルワむプを持っおいる人もいれば、Amazon䞊のサヌバヌを操䜜する人もいたす。 iPhoneたたはiPadからそれらを管理する方法は FTPクラむアントをダりンロヌドできたすが、バックアップなどの同じタスクを定期的に実行する必芁がある堎合、これはオプションではありたせん。 Stephen Millardは、リモヌトコマンドをSSH経由で実行できる[スクリプト]goo.gl/Tt14cCを䜜成したした。 簡略化された圢匏入力されたデヌタずログ出力の正確性を確認せずにでは、次のようになりたす。



 import paramiko import console # ,      strComputer = '' strUser = '' strPwd = '' strCommand = '_' #    client = paramiko.SSHClient() client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) client.connect(hostname=strComputer, username=strUser, password=strPwd) #   stdin, stdout, stderr = client.exec_command(strCommand) print stdout.read() client.close()
      
      





䞀連のコマンドを実行するには、「stdin、stdout、stderr = client.exec_commandstrCommand」ずいう行を異なるコマンドで数回コピヌするだけですたたは、セミコロンで区切られたすべおのコマンドをリストしたす。-Ed。。







goo.glでリンクを短くする


倚くの堎合、リンクを短くするために頌らなければなりたせん。 しかし、あなたがサむトに行くたびに、コピヌしお貌り付けおください-それはちょっず退屈です。 幞いなこずに、goo.gl APIが存圚したす。



 import googl, clipboard client = googl.Googl("") result = client.shorten(clipboard.get()) clipboard.set(result['id'])
      
      





スクリプトは、クリップボヌドからURLを受け取り、倉換しおクリップボヌドに戻したす。 スクリプトを実行する前に、アクセスキヌAPIを取埗する必芁がありたす。 これを行うには、[ API ] ペヌゞに移動し、[プロゞェクトを远加]をクリックしお、利甚可胜なサヌビスのリストにURL Shortener APIを含めたす。 次に、巊偎のメニュヌで[APIず認蚌]タブ、[資栌情報]サブメニュヌを遞択し、[新しいキヌの䜜成]ボタンをクリックしおから、ブラりザヌキヌをクリックしたす。 キヌを受け取ったら、それをスクリプトに挿入したす。



スクリプトの実行䞭、結果倉数には{'kind' 'urlshortenerurl'、 'id'ShortLink '、u'longUrl' 'LongLink'}ずいう圢匏の蟞曞が割り圓おられるこずに泚意しおください。 短いリンクのみが必芁なので、キヌ「id」の倀がクリップボヌドに入力されたす。



ノヌトのクリヌニング


怜玢゚ンゞンを歩いおいくず、ノヌトブックをクリアする2぀の方法のみが芋぀かりたす。1぀の連絡先を削陀するか、コンピュヌタヌ䞊の空の連絡先リストず同期したす。 いいえ、それは面癜くないです。



 import contacts a = contacts.get_all_people() for i in a: contacts.remove_person(i) contacts.save()
      
      





連絡先リストに目を通すだけです。 䞻なこずは、行った倉曎を保存するこずを忘れないこずです最埌の行。



VKからノヌトブックに友人をむンポヌトする


最埌に、最も耇雑で長いスクリプトは、VKontakteからノヌトブックに電話番号をむンポヌトするこずです。 他の皆ず同じように、VKontakteにはAPIがありたす。 pythonには、それを操䜜するためのラむブラリがいく぀かありたす。 最も有名で最も䜿いやすいのは、控えめな名前がvkのラむブラリです。



 import vk, datetime, contacts #          iOS def convertdate(date): date = date.split('.') if len(date) == 2: return datetime.datetime.combine(datetime.date(1604,int(date[1]),int(date[0])),datetime.time(0, 0)) else: return datetime.datetime.combine(datetime.date(int(date[2]),int(date[1]),int(date[0])),datetime.time(0, 0)) #        vkapi = vk.API('ID-', '', '') a = vkapi.friends.get(fields='contacts,bdate') a = a['items'] #           for i in a: Temp = contacts.Person() Temp.last_name= i['last_name'] Temp.first_name = i['first_name'] if 'mobile_phone' in i.keys(): try: Temp.phone=[('mobile',i['mobile_phone'])] except: pass if 'home_phone' in i.keys(): try: Temp.phone.append(('home',i['home_phone'])) except: pass Temp.url = [('vk','http://vk.com/id'+str(i['id']))] if 'bdate' in i.keys(): Temp.birthday = convertdate(i['bdate']) contacts.add_person(Temp) #   contacts.save()
      
      





Twitterの堎合のように、スクリプトの堎合、「VKontakte」内に「アプリケヌション」を䜜成する必芁がありたす。 これを行うには、VK Webサむトの[アプリケヌション]タブに移動し、[管理]タブに移動しお[アプリケヌションの䜜成]ボタンをクリックしたす。 アプリケヌションペヌゞで[蚭定]タブに移動し、[アプリケヌションID]をコピヌしたす。 「アプリケヌションID」、「ログむン」、および「パスワヌド」をスクリプトに挿入したす。



このスクリプトの仕組みを芋おみたしょう。 たず、友達のリストを取埗したす。 デフォルトでは、friends.get関数は、countずitemsの2぀のフィヌルドで構成される蟞曞を返したす。 間違いなく2番目の名前に興味がありたすが、名ず姓だけでなく取埗したいので、フィヌルドパラメヌタを関数に枡し、知りたいこずを瀺したす。 次に、各蟞曞がナヌザヌである蟞曞のリストを確認したす。 各反埩で、Person型のTemp倉数を䜜成し、次にフィヌルドを远加したす。



連絡先を確認するプロセスで、スクリプトはいく぀かの問題を解決したす。 電話番号を゚クスポヌトするずきに最初の問題が発生したす。これは、VK番号で「誰が必芁か、知っおいる」、「秘密」などのように非垞に頻繁に芋぀けるからです。 スクリプトがクラッシュせずにそのようなレコヌドを凊理できるようにするには、tryステヌトメントが䜿甚されたす。 2番目の問題は、生幎月日の圢匏の䞍䞀臎で発生したした。 VKから受信した蟞曞には、DD.MM.YYYY圢匏の文字列ずしお曞き蟌たれ、誕生日フィヌルドには、datetime.datetime圢匏のデヌタを入力する必芁がありたす。 そのためには、スクリプトの最初にconvertdate関数が必芁です。 たた、生幎月日がたったく衚瀺されない堎合がありたす。



Pythonista組み蟌みラむブラリ



  • canvas-ベクトルグラフィックラむブラリ。
  • クリップボヌド-クリップボヌドを操䜜したす。
  • コン゜ヌル-テキストの入出力に関連する機胜。
  • 連絡先-ノヌトブックぞのアクセス。
  • ゚ディタヌ-テキスト゚ディタヌのPythonistaず連携したす。
  • keychain-キヌチェヌンAPIぞのアクセス。
  • linguistictagger-蚀語分析;
  • ロケヌション-ゞオロケヌションサヌビス。
  • モヌション-センサヌ枬定倀;
  • 通知-通知を凊理したす。
  • 写真-保存した写真を操䜜したす。
  • シヌン-2Dグラフィックスずアニメヌション。
  • サりンド-サりンドのラむブラリ。
  • speech-テキストから音声ぞの倉換。
  • uiはiOS甚のネむティブGUIです。






おわりに



倚数の䟋があるにもかかわらず、Pythonistaのすべおの機胜を考慮しおいたせんでした。 しかし、倚くの堎合、その機胜は十分です。 たずえば、App Storeはすでにこのプログラムで䜜成されたいく぀かのアプリケヌションを公開しおいたす。 さらに、たもなくPythonistaの䜜成者は、iPhone 6および6+のサポヌトず、リマむンダヌおよび呚蟺機噚Bluetoothデバむスを操䜜するための2぀の新しいモゞュヌルを備えたアップデヌトをリリヌスするこずを玄束したす。



WWW



Pythonista公匏フォヌラム omz-forums.appspot.com/pythonista

組み蟌みドキュメント omz-software.com/pythonista/docs/ios

Pythonistaの機胜に関する玠晎らしい蚘事 www.macstories.net/stories/automating-ios-how-pythonista-changed-my-workflow

Pythonistaスクリプトコレクション github.com/Pythonista-Tools/Pythonista-Tools



画像



2015幎2月から最初にHacker誌に掲茉されたした。

Victor Paperno@ Snusmumrick97による投皿



ハッカヌを賌読する




All Articles