アーカイブ: 投稿

PythonでCGI作ってみた

投稿者:isc_blog

とっても稚拙で申し訳ないですが
先日覚えだしだ「Python」でCGIを組んでみました。

下記を「HelloPython.cgi」というファイル名で保存し
ウェブサーバー上にアップロード。
属性変更して実行権を与えてから・・・
※パーミッションを755にします。

webブラウザでアクセスします。


#!/usr/local/bin/python
# -*- coding:utf-8 -*-
import cgi
print “Content-type: text/html”
print
form = cgi.FieldStorage()yourName = form.getvalue(‘yourName’, ”)

print “””
<html>
<head>
<meta http-equiv=”Content-type” content=”text/html; charset=utf-8″>
<script type=’text/javascript’>
var yourName = ‘%s’;
function init() {
if (yourName != ”) {
alert(‘YOUR NAME IS ‘ + yourName);
}
}
</script>
</head>
<body onload=’init()’>
<form action=’HelloPython.cgi’>
<input type=’text’ name=’yourName’ value=” />
<p>
<input type=’submit’ />
<p>
</form>
</body>
</html>””” %(yourName)


コードはこれだけ

実行結果はこんな感じ
HelloPython.cgi実行結果

コード的には
1.「yourName」っていうパラメータがリクエストに存在したら
2.Javascriptでアラート表示
3.送信フォーム表示
・・・・これだけです。

とりあえず、動く!って確認だけ。
日本語入れると「数値文字参照」になってしまいます。
それは↓ここらへんを参考に・・・・
文字参照や実体参照を通常の文字に戻す【Python】
※↑head に 文字コード指定したら直りました・・・横着してはいけませんね 2011/05/08

しかし、最近CGIはPerlやってなくてPHPばっかりだったから
属性変更してパーミッション755に変更とかすっかり忘れてたなぁ~
この辺がWindows野郎って感じですね・・・

2011年5月6日

GAEのcron設定(覚え書き)

投稿者:isc_blog

Java 用の cron を使用したスケジュール タスク

<?xml version="1.0" encoding="UTF-8"?>
<cronentries>
  <cron>
    <url>/recache</url>
    <description>Repopulate the cache every 2 minutes</description>
    <schedule>every 2 minutes</schedule>
  </cron>
  <cron>
    <url>/weeklyreport</url>
    <description>Mail out a weekly report</description>
    <schedule>every monday of month 08:30</schedule>
    <timezone>America/New_York</timezone>
  </cron>
</cronentries>

シンプルなスケジュール指定方法(<schedule>~</schedule>内の記述
every 5 minutes
every 12 hours
2nd,third mon,wed,thu of march 17:00
every monday of month 09:00
1st monday of sep,oct,nov 17:00

さらに詳細な分岐設定もOK・・・
(“every”|ordinal) (days) “of” (monthspec) (time)
など・・・
あとはリンク先を見るべしw

2011年5月5日

PHPでMySQLのレコードに画像情報を保存するやり方

投稿者:isc_blog

PHPでMySQLへ画像格納のアップロードやり方
— テーブルは下記SQLで作成
[sql]
CREATE TABLE `img_data` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`img_bin` BLOB NOT NULL,
`mime` VARCHAR(64) NOT NULL
) ENGINE=MYISAM ;
[/sql]
格納側ソースこちら
[image_upload.php]で保存
↓↓
[php]
<?php
$host=”localhost”;
$user=”●●●●”;
$pass=”■■■■”;
$db_name=”▼▼▼▼”;
?>
<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″>
<title>画像DB格納</title>
</head>
[/php]
ファイルアップロード
[php]
<form method=”POST” enctype=”multipart/form-data” action=”image_upload.php”>
<input type=”hidden” name=”MAX_FILE_SIZE” value=”3145728″><!–BLOB型の限界–>
画像ファイル選択:<input size=”30″ type=”file” name=”upfile”>
<input type=”submit” name=”submit” value=”送信”>
</form>
<?php
if($_POST["submit"]!=”"){ // 送信された場合のみ
if($_FILES["upfile"]["tmp_name"]==”none”){
print(“ファイルのアップロードができませんでした。\n”);
exit;
}
$fp=fopen($_FILES["upfile"]["tmp_name"], “rb”);
if(!$fp){
print(“アップロードしたファイルを開けませんでした”);
exit;
}
$imgdat=fread($fp, filesize($_FILES["upfile"]["tmp_name"]));
fclose($fp);
print(“ファイルサイズ:$_FILES["upfile"]["size"]\n”);
$len=strlen($imgdat);
print(“データ長=$len”);
$data=pathinfo($_FILES["upfile"]["name"]);
$ext=$data[‘extension’]; //拡張子
// 拡張子判定
if($ext==”jpg” || $ext==”jpeg”){
$mime=”image/jpeg”;
} else if($ext==”gif”){
$mime=”image/gif”;
} else {
print(“画像ファイルのみアップロード可能です。”);
exit;
}
print(“MIME-TYPE:”.$mime.”");
$imgdat=addslashes($imgdat);
$con=mysql_connect($host, $user, $pass);
if(!$con){
print(“MySQLへの接続に失敗しました”);
exit;
}
if(!mysql_select_db($db_name)){
print(“データベースへの接続に失敗しました”);
exit;
}
$sql=”INSERT INTO img_data(img_bin, mime) values(‘$imgdat’, ‘$mime’)”;
$result=mysql_query($sql);
if(!$result){
print(“SQLの実行に失敗しました”);
print(mysql_errno().”: “.mysql_error().”");
exit;
}
$sql=”select max(id) from img_data “;
$result=mysql_query($sql);
if(!$result){
print(“SQLの実行に失敗しました”);
print(mysql_errno().”: “.mysql_error().”");
exit;
}
$row=mysql_fetch_row($result);
$current_id=$row[0];
mysql_close($con);
unlink($_FILES["upfile"]["tmp_name"]);
}
?>
<div>
登録画像ID:<?php echo $current_id; ?>
<img src=”view.php?id=<?php echo $current_id?>” />
</div>
</BODY>
</HTML>
[/php]
表示側ソースこちら
[view.php]で保存
↓↓
[php]
<?php
$host=”localhost”;
$user=”●●●●”;
$pass=”■■■■”;
$db_name=”▼▼▼▼”;
$id=intval($_GET[‘id’]);
$con=mysql_connect($host, $user, $pass);
if(!$con){
print(“MySQLへの接続に失敗しました”);
exit;
}
if(!mysql_select_db($db_name)){
print(“データベースへの接続に失敗しました”);
exit;
}
$sql=”select img_bin from img_data where id=$id”;
$result=mysql_query($sql);
if(!$result){
print(“SQLの実行に失敗しました
“);
print(mysql_errno().”: “.mysql_error().”
“);
exit;
}
if(mysql_num_rows($result)==0){
$sql=”select img_bin, mime from img_data where id=1″;
$result=mysql_query($sql);
if(!$result){
print(“SQLの実行に失敗しました
“);
print(mysql_errno().”: “.mysql_error().”
“);
exit;
}
}
$row=mysql_fetch_row($result);
header(“Content-Type: “.$mime);
echo $row[0];
mysql_close($con);
?>
[/php]
テストサイトを作って・・・・
と思いましたが、変な画像を差し込まれると厳しいものがあるので自粛しました。
コード中のセキュリティに関する配慮は各自お願いします。

2011年5月4日

Webサービスで「都道府県→路線→駅」情報を簡単に表示

投稿者:isc_blog

素敵なWebサービスを発見しました!
HeartRails Express | 路線/駅名/最寄駅データサービス
こちらのWeb APIを使うだけで「エリア/都道府県/路線/駅/最寄駅」の情報が簡単に取り扱えてしまいます。
しかも、商用・非商用問わず無料で利用出来ます。

サンプル↓

ソースはこれだけ・・・

[html]
<html><head>
<meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″ />
<title>都道府県→路線→駅のコンボが簡単に出来るWebサービス</title>
<script type=”text/javascript” src=”http://express.heartrails.com/api/express.js”></script>
</head>
<body onload=”HRELoadPrefecture(‘prefecture’, ‘line’, ‘station’);”>
都道府県を選択すると・・・<select id=”prefecture” name=”prefecture” onchange=”HREOnChangePrefecture();”>
<option value=”都道府県を選択してください”>都道府県を選択してください</option></select><br />
路線が自動的に入れ替わり・・・<select id=”line” name=”line” onchange=”HREOnChangeLine();”><option value=”路線を選択してください”>路線を選択してください</option></select><br />
駅もその路線の駅一覧に入れ替わります・・・<select id=”station” name=”station”><option value=”駅を選択してください”>駅を選択してください</option></select>
<br />
<a href=”http://express.heartrails.com/”>Heart Rails Express</a>| 路線/駅名/最寄駅データサービス を利用しました。
<br />
※「都道府県名」 「路線名」 「駅名」 の連結コンボボックス をそのまま利用しただけです。
</body>
[/html]
不動産サイトとかナビ系サイトとかに使えそうです!

2011年5月3日

おすすめの画面キャプチャー取りツール

投稿者:isc_blog

WEB系開発でのテスト中などでブラウザ画像を取り込む際、なにを使ってますか?
私はここ数年、「FastStone Capture」というソフトを使っています。

最新バージョンはシェアウェアですが
バージョン5.3まではフリーみたいなので
5.3を使っています。
日本語化パッチもあるみたいですが
少しでも英語に慣れるため(笑)英語のまま使用します。
なかなかよさげ!

http://www.gigafree.net/tool/capture/faststonecapture.html

例えばメニューの中のメニューを選択する場合など、時間差で取り込んでくれる機能も付いていますので・・・
こんな画面キャプチャ
↑こんな画像も取り込めます。
マニュアル作成時なんか すごい便利!!!

超オススメです。

2011年5月2日

Python版 逆ピラミッドを作る

投稿者:isc_blog

前回のブログでPythonに手をつけてしまったので
とりあえず
先日、Javaで作った「逆ピラミッド」を「Python」でやってみます。

※Pythonのインストール・eclipseの設定については前回のブログ
 「Pythonをはじめてみる」で詳しく書いてます。ご参考にどうぞ。

以下、[Pyramid.py]で保存します。
[python]
”’
Pyramid
@author: tsato
”’

i = 10
for j in range(i):
&nbsp;&nbsp;&nbsp;&nbsp;print ("*" * (i-j))
print("\n")
[/python]
※きちんとインデントしないといけません!

Pythonのパスを通します。(パスは前回の内容通りです。)
コマンドプロンプトで
set path=%path%;C:\dev\python32
とやってから
「Pyramid.py」を保存したディレクトリに移動し

python Pyramid.py として実行します。

実行結果・・・・


**********
*********
********
*******
******
*****
****
***
**
*


コード自体は Javaより短いっ

2011年5月1日

Pythonをはじめてみる

投稿者:isc_blog

前からやってみたかった言語「Python」について「日経ソフトウェア」に記事があったので簡単なところから手をつけてみようと思いました。
どうせなら記事にしてわかりやすくしとこうかな・・・という感じで書いてみます。

 「Pythonとは」
「Python は Guido van Rossum 氏による、フリーなオブジェクト指向プログラミング言語です。」※「Python Japan User’s Group」サイトより引用

ん!?「Java」を習得している私からすると「じゃあ、Javaと同じかな」と思うのですが、「Python」はインタプリタ型、「Java」はコンパイラ型という違いがあるようです。
※インタプリタ型はプログラムを作成したまま実行出来るもの、コンパイラ型はマシン語(または中間言語)にコンパイルしたあと実行出来るもの・・・です。

ただし、やはり実行速度については「コンパイラ型」の「Java」に軍配が上がります。
※参考資料 Ruby,Python,Javaの実行速度比較

データベース操作、Webプログラミング、デスクトップUIを構築するためのライブラリ・モジュールも存在する(※日経ソフトウェアから引用)らしいので楽しそう~♪

というわけで、とにかくはじめたがりな私は前置きもテキトーに行動に移します。

 「インストール」

「Python Japan User’s Group」サイトのメニュー>コンテンツ>ダウンロードをクリックして「Python標準リリース」リンクをクリック。
すると「ダウンロードページ」に遷移し「最新バージョン」以下に「Python2.7.1」と「Python3.2」が存在します。
「日経ソフトウェア」では「2.7.1」をダウンロードしていますがここではあえて「3.2」をダウンロードしてみます。

python01

Python Japan User's Group


※自分の環境に合う物をダウンロードします。
ダウンロードが完了したら実行します。


python02

Pythonインストール


どんどんインストールしていきます!
※画面はWindows64ビット版です。


python03

Pythonインストール・・・


インストールするディレクトリ設定。
※ここでは「C:\dev\Python32\」にインストールします。


python04

Pythonインストール・・・・




とにかく「Next >」の嵐!



あとは待つだけ!



完了!


 Eclipseの設定

Help > Install New Software… クリック。※日本語版の方は読み替えてください。



Add…ボタンをクリックし出てきた「Add Repository」に
Name: Pydev
Location: http://pydev.org/updates/
と入力し「OK」を押します。


しばらく待つと・・・





インストールするものを聞いてくるのでとにかく全部チェック(※PyDevだけでいいと思いますが・・・)して「Next >」を押します。



こんな確認画面が出てくるので「Next >」を押します。



この画面では「I accept the terms of the license agreements」をチェックして
「Finish」を押します。(※acceptしないと「Finish」が有効になりません。)



あとは待つのみ・・・・



で「Restart Now」押して再起動!

「Python」と「PyDev」両方インストール完了後、eclipse上で
「Python」の設定を行います。
Window→References  をひらいて

「Python Interpreters」の「New…」をクリック





表示された「Select Interpreter」に
Interpreter Name: Python3.2
Interpreter Executable: C:\dev\Python32\python.exe
※インストール場所に読み替えてください。
設定し「OK」ボタンを押す。



こんな画面が現れるのでデフォルトのまま「OK」ボタン押す。



こんな感じでいいのかな・・・と思いつつ「OK」ボタン押下。


 Pythonプロジェクトの作成
「File」→「New」→「Project…」選択

「New Project」のSelect a wizardで「Pydev Project」選択し「Next >」ボタン押下





プロジェクトの設定でいろいろ入力
Project Name: PyTest (※テキトーにどうぞ)
Project Contents: ※自分のすきなところ
Project Type: Python
Grammer Version: 3.0
Interpreter: Python3.2
Create default ‘src’ folder and add it to the pythonpath?: チェック
ここまで設定したら
「Finish」を押す。
※パースペクティブをどうのこうの言われるので言われるがまま「OK」押す。



「PyTest」プロジェクトが出来たので
‘src’を右クリックしてパイソンプログラムを書きましょう!



New → Pydev Module 選択



とりあえずNameだけ「test」変更して「Finish」押す。





「test.py」が作成されるので内容を変更し保存します。


”’
test.py
”’
print(“Hello Python!”)





「test.py」を右クリックして
「Run As」→「Python Run」を選択。


Console に「Hello Python!」と表示されて完了!

今回はここまでにしとうございます。

2011年5月1日

Java で逆ピラミッドを作る

投稿者:isc_blog

Java で逆ピラミッドを作る

Yahoo!知恵袋で回答したものをこちらにも・・・
なにかの宿題なのかな・・・

以下、[Pyramid.java]で保存してください。
———————————–
public class Pyramid{
public static void main(String[] args){
// ピラミッド階数
int i = 10;
for(int j = 0; j <= i; j++){ for (int k = i - j; k > 0; k–) {
System.out.print(“*”);
}
System.out.println();
}
}
}
——————————

コマンドプロンプトでファイルを保存したディレクトリに移動して
javac Pyramid.java
※JAVA_HOMEパス及びクラスパスを通してある前提です。

java Pyramid
で実行・・・

—–
実行後

**********
*********
********
*******
******
*****
****
***
**
*

こんな感じ。

2011年4月30日