# 【Python】 和IOS共用剪貼簿!
## 前言
Apple全家桶好貴!!
沒有MacOS但是想享受跨平台剪貼簿整合
可以試試看我這個方法
利用捷徑與網頁互動 交換剪貼簿資料
文末也提供非程式人員的執行檔
## 簡介
利用IOS上的捷徑功能,
透過網頁傳遞參數,
讓其他平台的剪貼簿能與IOS的剪貼簿互動。
## 環境建置
* Python 3.7.7
* Flask 1.2.2
* pyperclip 1.8.0
```python=
pip install pyperclip
pip install flask
```
## 程式碼
```python=
from flask import Flask
from flask import request
import pyperclip
import socket
import webbrowser
def get_host_ip():
try:
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(('8.8.8.8', 80))
ip = s.getsockname()[0]
finally:
s.close()
return ip
print("請連接此ip: ",get_host_ip())
app = Flask(__name__) # __name__ 代表目前執行的模組
@app.route("/copy")
def PC2IOS():
#這邊的paste 相當於Ctrl + V 把剪貼簿上的文字放入變數中
paste = pyperclip.paste()
return paste
@app.route("/paste", methods=['GET'])
def IOS2PC():
get_paste = request.values.get('paste')
if(get_paste):
#這邊看有沒有包含http 如果有就複製並打開
if("http" in str(get_paste)):
pyperclip.copy(str(get_paste))
webbrowser.open(str(get_paste))
else:
pyperclip.copy(str(get_paste))
return str(get_paste)
else:
pyperclip.copy("COPY error!")
return "COPY error"
if __name__ == "__main__":
app.run(host=get_host_ip(), port=8080) #啟動伺服器
```
如果不太清楚Flask的運作方式可以看看這篇[Flask 隨筆](/MVp8V9HJR1GvgNBRw-jJ5A)
</br></br>
首先我們要先取得區域網路的ip,或者可以選擇把這個服務丟到公開網路上
```python=
def get_host_ip():
try:
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(('8.8.8.8', 80))
ip = s.getsockname()[0]
finally:
s.close()
return ip
```
主要使用到pyperclip提供的兩種功能
* pyperclip.paste() 用於取得PC的剪貼簿,相當於Ctrl+V的功能
* pyperclip.copy("string") 複製後面的參數
利用這兩個函式再加上IOS捷徑所提供的剪貼簿存取,就能輕鬆互動了!
</br>
這邊來講PC複製到IOS的片段
```python=
@app.route("/copy")
def PC2IOS():
#這邊的paste 相當於Ctrl + V 把剪貼簿上的文字放入變數中
paste = pyperclip.paste()
return paste
```
程式碼內要做到的就是讓網頁顯示剪貼簿的內容而已
所以只要取得剪貼簿>回傳剪貼簿內容
其餘的就在捷徑上設定就好了
</br>
接下來換IOS到PC的部分
```python=
@app.route("/paste", methods=['GET'])
def IOS2PC():
get_paste = request.values.get('paste')
if(get_paste):
#這邊看有沒有包含http 如果有就複製並打開
if("http" in str(get_paste)):
pyperclip.copy(str(get_paste))
webbrowser.open(str(get_paste))
else:
pyperclip.copy(str(get_paste))
return str(get_paste)
else:
pyperclip.copy("COPY error!")
return "COPY error"
```
這邊就需要用到GET的功能
利用把IOS上的剪貼簿利用GET通知網頁
再把取得到的參數填入pyperclip.copy內就完成了
這邊有另外提供一個直接打開網頁的功能,其實也只是很簡單的判斷是否為網址而已
## IOS捷徑設定
* 記得要把"100.15"改成自己電腦的 192.168."******.******",並且要在同一區網內
* [將PC剪貼簿傳至IOS](https://www.icloud.com/shortcuts/3bcaea14a439481b92965f2f924bb493)
* [將IOS剪貼簿傳至PC](http://www.icloud.com/shortcuts/372f113719424e6db3fc615878bb0c22)
* [將PC剪貼簿傳至IOS,並開啟網頁](https://www.icloud.com/shortcuts/ac562dafa8be4d2986900e2fccdc2e8f)
在設定上大同小異,
唯一一個比較讓人疑惑的地方,
是IOS上如果要打開網頁不能直接用剪貼簿,
必須先轉成文字 在讓瀏覽器吃,
才能讀到正確的URL

## 預改進項目
除了固定IP的方式外
不知道有沒有辦法能夠自動同步區網ip
這樣如果ip有更動就不必到捷徑內更新了
## 檔案下載
[Github](https://github.com/kaizziizg/IOS-scrapbook-with-PC)
[執行檔](https://github.com/kaizziizg/IOS-scrapbook-with-PC/raw/master/dist/main.exe)
## 參考資料
> python 获取本机IP地址 https://blog.csdn.net/u013314786/article/details/78962103
{%hackmd BkVfcTxlQ %}