XserverでPython3環境を独自に構築してしまえば、豊富なPythonパッケージを自由にインストールすることが出来る。さらに応用として、PythonをPHPのようなサーバサイドプログラムとして実行させることも出来るようになる。
以下は、実際にやってみた手順。
XserverにSSHでログインする
以下の当サイト記事を参考にXserverにSSH接続できるようにする。
SSH接続できるようになる、ということは要するにXserverにターミナルで接続できるようになる、ということ。(これが出来ないと何も始まらない)
SSH接続の手順の中で「公開鍵キーのファイル」が手元にダウンロード出来るようになり、「公開鍵パスワード」を自分で作成することになる。「公開鍵パスワード」は後々必要になる。
SSHでログイン後、linuxbrewをインストールする
linuxbrewインストール時に、XserverにSSHでログインするときのパスワード「公開鍵パスワード」が必要になる。
Xserverへのlinuxbrewインストールについては以下のサイトを参考にした。(サイトに書いてある通りにやったらインストールできた)
外部サイト
[sanko href=”https://yukiyuriweb.com/migrate-xserver-and-install-linuxbrew/” title=”XSERVERで最新サーバに移行してLinuxbrewをインストールするまでの手順” site=”YUKiYURi WEB Blog” target=”_blank”]
linuxbrew上でPython3をインストールする
まずはPyhton3をインストール。
brew install python3
pip3コマンドで必要なPythonパッケージをインストールする
Python3がインストール出来ればあとは、pip3コマンドでお好きなパッケージをインストールするだけ。
例)スクレイピング用のライブラリbeautifulsoup4の場合
pip3 install beautifulsoup4
例)QRコード生成ライブラリqrcode
pip3 install qrcode
嬉しい程簡単にパッケージ追加可能!
Python3で動作するサーバサイドプログラムを作成する
一番重要な部分は、Pythonのコード先頭行に記述するPythonへのパス。
linuxbrew上で構築したPython3へのパスをコードの先頭に記述するようにする。
例としてサーバIDがhogehogeの場合のPython3へのパスは以下のようになる。
#!/home/hogehoge/.linuxbrew/bin/python3
Pythonプログラムをサーバにアップロード
サーバの適当な位置にPythonプログラムをアップロードする。
アップロードした同じディレクトリに以下の.htaccessファイルをアップロードしておく。
.htaccess
DirectoryIndex index.py indexhtml AddHandler cgi-script .py
ちなみに1行目は、index.pyというファイル名の場合、URL入力のとき省略可能という意味。
2行目は、拡張子が~.pyのファイルをCGIプログラムとして認識するための記述。
アップロードした~.pyのファイルは、実行権限を与えておく。
chmod +x index.py
以上で、index.pyのようなPythonプログラムをサーバ上で実行できるようになる。
実際のPythonコード例:安倍首相のTwitter最新5件をスクレイピングして表示
日本語の文字コードをHTML化する際の記述で手こずったので、サンプルを載せておく。
※「ここは自分のサーバID」の部分は置き換えてください。
※pip3 install beautifulsoup4でパッケージを事前にインストールしておいてください。
[btn href=”https://torisky.com/cgi/checkSinzo/” target=”_blank” class=”raised blue-bc strong”]実行サンプルを見る[/btn]
index.py
#!/home/ここは自分のサーバID/.linuxbrew/bin/python3 # -*- coding: utf-8 -*- import urllib.request from bs4 import BeautifulSoup # 日本語を扱うために必要な設定 import sys sys.stdin = open(sys.stdin.fileno(), 'r', encoding='UTF-8') sys.stdout = open(sys.stdout.fileno(), 'w', encoding='UTF-8') sys.stderr = open(sys.stderr.fileno(), 'w', encoding='UTF-8') # HTMLヘッダ出力 print("Content-type: text/html; charset=utf-8\r\n\r\n") # Twitterアカウントにアクセス url = "https://twitter.com/abeshinzo" data = urllib.request.urlopen(url) # HTMLを解析して取得 soup = BeautifulSoup(data, 'html.parser') # Twitterのつぶやき部分のみ取り出す items = soup.find_all("div", class_="js-tweet-text-container") # HTMLタグ出力 print("<!DOCTYPE html>") print("<html>") print("<head>") print("<meta charset='utf-8'>") print("<meta name='viewport' content='width=device-width,user-scalable=yes'>") print("<link rel='stylesheet' href='style.css'>") print("<title>Twitterのつぶやきを取得してみる</title>") print("</head>") print("<body>") print(" <h1>Twitterのつぶやきを取得してみる</h1> ") print(" <h2>とある人物の最新5件のつぶやき</h2> ") # 最新の5件を表示 endPoint = 5 if len(items) <= 5: endPoint = len(items) print(" <ul>") for i in range(endPoint): print(" <li>") print(items[i].text) # つぶやき(1件分) print("</li> ") print("</ul> ") print(" <footer><small>© <a href='https://torisky.com/' target='_blank'>torisky.com</a></small></footer> ") print("</body>") print("</html>")
Pythonの豊富なライブラリを使えば、何か面白いことが簡単に出来そうです!
コメント