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の豊富なライブラリを使えば、何か面白いことが簡単に出来そうです!
 
 


コメント