2010年02月 / 01月≪ 12345678910111213141516171819202122232425262728≫03月

--.--.-- (--)

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
--:--  |  スポンサー広告  |  EDIT  |  Top↑

2010.02.22 (Mon)

PythonでXML操作

とりあえず、今は無意味に6時間ごとに乱数を呟いているTwitterのbotにちゃんとしたことをさせたい今日この頃。
というわけで、このブログを更新したらその記事へのリンクをつぶやくようにしたいと思います。

アプローチとしては、FC2ブログに用意されているRSS機能を利用。
RSSのXMLページを取得し、それを解析して最新記事について情報を得ようという感じ。
ほかに何か方法があれば教えてください。
メールはあまり確認しないのでコメントいただけるとありがたい。


さて、まずはインターネットからWebページを取得する必要がある。
こちらのサイトが参考になった。
参考:
[Python]urllib, urllib2 を使ってGET/POST


次はXMLの取得。
けれども、よくわからない。
なので明日以降頑張ります。
参考になりそうなところのメモだけ残しときます。

http://www.python.jp/doc/2.4/lib/markup.html
http://d.hatena.ne.jp/rintaromasuda/20061105/1162685944
スポンサーサイト

テーマ : プログラミング ジャンル : コンピュータ

01:25  |  Python  |  TB(0)  |  CM(0)  |  EDIT  |  Top↑

2010.02.14 (Sun)

PyScriptorの不具合?

プログラムを書いていたんだが、どうもPyScriptorだと変更が反映されない時があるようだ。
プログラムを編集しても古い状況でデバッグを行いだすため、治ったことに気づかない。
これで一時間以上費やしてしまった。

PyScriptorを再起動したり、PCを再起動したらちゃんと最新の状態のソースで実行される。

う~ん、よくわからん。(´ε`;)

テーマ : プログラミング ジャンル : コンピュータ

06:26  |  Python  |  TB(0)  |  CM(0)  |  EDIT  |  Top↑

2010.02.14 (Sun)

[ python ] app.yaml や cron.yaml の設定 [ GoogleAppEngine ]

GAE上で必ず必要になるのが「app.yaml」というファイル。
このファイルに実行したいプログラムのパスなどを記載し、ユーザからURLのリクエストが来たら対応するプログラムを起動するように設定する。
以下、具体例。



application: holy-k-night-test
version: 3
runtime: python
api_version: 1

handlers:

- url: /HolyKnightBot/.*
script: HolyKnightBot/greed_holy_knight.py
login: required

- url: (/.*)|(/HelloWorldGAE/.*)
script: HelloWorldGAE/helloworldgae.py




「application:」のところには、アプリケーション名を入れる。
アプリケーション名とは、一つのアカウントが10個まで持てるアプリケーションの名前。
説明になってないなw
「version:」には、その登録するアプリケーションのバージョンを書き入れる。
整数値で、1~100までの設定が可能。
「runtime:」には実行環境の情報を入れる。
「api_version:」には、実行環境のバージョンについて記入。
pythonは version 1 しかないようだ。

そして、「handlers:」以降にアプリケーション情報を書き込んでいく。
   ・url:   ユーザがアクセスするURLを書き込む。ここには正規表現を使うことができ、
         この例では「HolyKnightBot」および「HelloWorldGAE」へのURLに適応する。
   ・script: URLに対応する実行したい処理のプログラムファイルを記述。
   ・login:  これは任意で設定することができ、「required」と設定するとGoogleAccountにログインした人しかアクセスできない。
         GoogleAccountを使ったプログラムも組めるため、そういうときに有効に使うことができるのではないかと。
ちなみに、login設定をしてローカルでテスト実行を行う場合、ブラウザでローカルアクセスするとログイン画面が表示される。
ログインにはデフォルトで用意されたアカウントを使用することになり、その際にAdministratorか一般ユーザかを選択できる。






GAE(GoogleAppEngine)上で定期的にプログラムを走らせたい場合にはCronという機能を使う。
CronはLINUXでスクリプトを走らせるときによく使われているデーモンらしいのだが、全然知らなかった。
LINUXは多少触ったことはあったけれども、実家でネットにつなげるようになったのはほんの数年前だったから、LINUXで好き勝手にいじりまくる時間はなかった。

さて、LINUXで使われるCronは全く知らないので、GAE上のCronについて。
GAE上のCronはYAMLという形式のファイルで管理する。
「cron.yaml」というファイルを定期実行で走らせたいプログラムと一緒にアップしてやるだけというお手軽さ。

以下は、この休みで作ってたテスト用TwitterBotのプログラムに使ったcron.yaml。



cron:
- description: twitter bot "holy-(K)night"
 url: /HolyKnightBot/???
 schedule: every 60 mins




「cron:」
という行に続き、「description:」や「url:」などの設定を行う。
descriptionでは、おそらく名前を付けているのかな?
urlでは、実行する間隔を設定。
この例では一時間ごとという設定にしてあるが、毎週月曜朝9時や4月1日0時に実行なども設定可能。
  Python 用の cron を使用したスケジュール タスク


ブラウザからアプリケーション情報を確認できるが、その中の項目に「CronJobs」という項目がある。
Cronが設定されていると、その内容が見ることができるが、cron.yamlをアップして設定した直後では「 Hasn't run yet 」という状態になっている。
だが、これはうまく設定できていないというわけではなく、自動更新が一度行われると「Success」となるため、ちゃんと設定されていてもこういう表示がされる。

テーマ : プログラミング ジャンル : コンピュータ

04:22  |  プログラミング系  |  TB(0)  |  CM(0)  |  EDIT  |  Top↑

2010.02.13 (Sat)

[Python]基底クラスの隠しアトリビュートにアクセスする方法

   [インスタンス名].[基底クラス(スーパークラス)名][__アトリビュート名]
という感じで呼べばよいみたい。
基底クラス名とアトリビュート名の間には「.」とか不要です。
アトリビュート名は「__」で開始していないとだめっぽい(?)


参考
第3 回Python オブジェクト指向ゼミ(PDFファイル)
   4ページ目、「データの隠ぺい」のところ。




ついでにメモ。
いずれ使うであろう便利な機能。

GoogleAppEngine のサーバサイドの処理時間をProfileで表示させる為にcProfile使う

テーマ : プログラミング ジャンル : コンピュータ

19:28  |  Python  |  TB(0)  |  CM(0)  |  EDIT  |  Top↑

2010.02.13 (Sat)

python での import メモ

import しようとしたモジュールが検索されるパスの順番。
   1.実行中のファイルと同じフォルダ
   2. カレントフォルダ
   3.環境変数「PYTHONPATH」に列挙したフォルダ
   4.sys.pathに登録してあるフォルダ


sys.pathに自分の作ったモジュールの入っているディレクトリを追加する例
   sys.path.append(SELF_MODULES_DIRECTORY_PATH)

テーマ : プログラミング ジャンル : コンピュータ

17:32  |  Python  |  TB(0)  |  CM(0)  |  EDIT  |  Top↑

2010.02.11 (Thu)

[ python + GAE ] HelloWorldの作成してGAEにアップロード [Windows]

GAEの公式ページに「HelloWorldを表示してみよう!」的なのがあったのでやってみた。
超簡単に手順を書くとこんな感じ。

1.python2.5のインストール
2.GAEのSDKインストール
3. フォルダを作成し、内部にソースファイル helloworldgae.py と設定ファイル app.yaml を作成
4.コマンドプロンプトから「C:\ProgramFiles(x86)\Google\google_appengine\dev_appserver.py」を実行
  ※dev_appserver.py を実行する際、引数にディレクトリ名を指定
5. ブラウザから「http://localhost:8080」へアクセス

これで、「HelloWorld」と表示されていたことが確認できました。
終了は、コマンドプロンプトを閉じるなり、Ctrl+C とか コンソールの Breakキー とかでできます。
もっとちゃんとした方法があるのかもしれないけど・・・

やっていて詰まったのは、ファイル名のこと。
最初は helloworld_gae.py というファイル名でやっていたんだが、dev_appserver.pyを実行したらエラーで実行できなかった。
「 _ 」はファイル名に使っちゃいけないみたいね。

HelloWorldOnGAE



次は、アップロード。

1.Googleのアカウントを用意して、GAEに登録
2.アプリケーションは10個まで登録できるので、とりあえず一つ作る
3.先ほど作ったHelloWorldプログラムをアップロード。
 3.1.コマンドプロンプトに「google_appengine\appcfg.py update アプリケーションディレクトリパス」と入力
 3.2.Googleアカウント名とパスワードを聞かれるので入力
 3.3.アップロード完了
4.[ http://アプリケーション名.appspot.com ] に公開されたはずなので確認。

一応確認できました。
http://holy-K-night-test.appspot.com

HelloWorldOnGAE_Uploaded



さてさて、いろいろ勉強することいっぱいだ。


テーマ : プログラミング ジャンル : コンピュータ

19:09  |  Python  |  TB(0)  |  CM(0)  |  EDIT  |  Top↑

2010.02.11 (Thu)

GAE上ではpython-twitterは使えないのか!?!?

GAEとpythonとtwitterについて調べてたら、どうもそのままだとpython-twitterを使うことができないらしいことが分かった。
Apiクラスの中でファイルキャッシュを扱うところがあり、それがよろしくないそうだ。
なんかよくわからんが、困った。
と思ったけれども、なんか一応できるぽいんでこのままpython-twitterを使ってみることにしまふ。

参考URL:
   ・SPEAKER BREAKA
   ・ksnn diary

テーマ : プログラミング ジャンル : コンピュータ

03:26  |  Python  |  TB(0)  |  CM(0)  |  EDIT  |  Top↑

2010.02.11 (Thu)

python-twitterプログラミング進捗報告02

pythonでtwitter用bot作成中の進捗報告ログその2。

とりあえず、フォロワーとフォローの差分とって、ファイルに保存するとこまで作りました。
一応フォローするメソッドも用意はしてあるので一文追記すればフォローできるはず。
明日というか今日は建国記念日で休みだってこと忘れたけど、ちょうどいいからGoogleAppEngine使ってみたいと思いますです。

2時か・・・
寝る、ネトゲ、早速GAEのお勉強、botの機能を増やす、久々にTopCoder、英語の勉強、ニコニコ、ニコ生、2ch、Pythonの勉強、etc...
どれにしましょう。
たった今ニコ生アラートがちょっと気になる放送を通知しました。
つーわけでニコ生見ながらプログラミングに決定ですな。
金曜の朝起きれるかどうかなんて知ったこっちゃないさ。

テーマ : プログラミング ジャンル : コンピュータ

02:11  |  Python  |  TB(0)  |  CM(0)  |  EDIT  |  Top↑

2010.02.08 (Mon)

pythonメモ ~ファイル・ディレクトリ関連~

・現在の年月日時の取得+表示
  import datetime
  today = datetime.datetime.now()
  today.strftime("%Y-%m-%d_%H-%M-%S")

・カレントディレクトリのパス取得
  import os
  pwd = os.getcwd()

・ディレクトリの作成
  import os
  os.mkdir(dir_path)

・ディレクトリの存在確認
  import os
  os.path.isdir(dir_path)

・ファイルの存在確認
  import os
  os.path.exists(file_path)


・ファイル読み込み時の注意

    fr = open("file_name", "r")
    fr.readline()

  としてファイルから1行のテキストを取得した場合、末尾に改行文字も含まれる。
  これが邪魔で除去したい場合は、

    fr.readline().rstlip("\r\n")

  とすれば良い。
  rstlip()は、対象の文字列の末尾から、引数の文字集合を取り除くメソッド。
  ちなみに、stlip()というものも存在し、こちらは先頭と末尾が対象。

  ただし、環境によって改行が違うことを考慮する必要がある。
  引数の文字集合を"\r\n"としておけば、LINUX, Windows, Mac のどれでも対応できるのだろうか・・・
  なんとなくちゃんと改行文字が取り除かれる気がするが・・・

テーマ : プログラミング ジャンル : コンピュータ

02:23  |  Python  |  TB(0)  |  CM(0)  |  EDIT  |  Top↑

2010.02.08 (Mon)

python-twitterプログラミング進捗報告

先週、
   「週末にはフォローしてくれた人をフォローし返すプログラムを作る予定。」
と書いた。
だが、フォローし返すプログラムは作ってません。
土日でやってたのは、

  ・botクラスのbaseとなるクラスをぼんやりとイメージ
  ・bot用アカウントでログイン
  ・follower/friend の名前取得
  ・follower/friend の名前リストをログファイルに出力
  ・follower/friend の名前リストをログファイルから取得

とか。
pythonになれなかったり設計を途中で変えたりで、結構エラー出しまくって作業がはかどりませんでした。
まぁ、ネトゲやらニコニコやらを見ていたというのもはかどらなかった大きな原因ですが。

さて、では今週中、というか金曜前までに済ませておきたいのは、

  ・follower/friend のログデータと現在のデータとの差分算出
  ・followerをfollowする

あたりの機能。
そして、金~日で GoogleApiEngine を使って動くようにしたい。
フォローしてくれた人をフォローし返すだけのbotだけど、まぁ最初としてはそんなもんでいいでしょ。

テーマ : プログラミング ジャンル : コンピュータ

02:09  |  プログラミング系  |  TB(0)  |  CM(0)  |  EDIT  |  Top↑

2010.02.07 (Sun)

pythonでのカプセル化について

pythonでクラスを作っていたら、publicやらprivateやらのアクセス制限はどうしているのかと調べてみた。
どうやら、名前を工夫するらしい。
具体的にどうするのかというと、アンダースコア(_)を変数名やメソッド名の頭に付加すれば良い。
アンダースコアの付け方には2種類あり、1つだけ付加する場合と2つ連続で付加する方法がある。

1つだけの場合は、pythonのシステムが制限してくれるわけではなく、あくまでプログラマが「これは非公開である」という認識を持ってクラスを利用しなければならない。
そのため、書き換えようと思えば書き換えることができる。
プログラマが正しい使い方をしてくれることを信じるわけですな。

2つ連続で付加する場合は、pythonのシステムが内部で変数名を変換してクラスの利用者からのアクセスをできないようにする。
見ることも書き込むこともできない。
ただし、あくまで内部的に変数名を変化させるだけなので、内部でどのような変換がおこなわれているかを知ることができれば、アクセスして書き換えることが可能となる。


う~ん、どうもpythonのこのやり方はしっくりこないなぁ。
イマイチ制限が弱い気がする。
スクリプト言語はコンパイラと違って色々やりにくいのかね、この辺。
具体的な例はありませんが参考URLは貼っておきます。
Rubyなんてソースを見たことすらないけど、要点だけあって見やすかった。

テーマ : プログラミング ジャンル : コンピュータ

06:57  |  プログラミング系  |  TB(0)  |  CM(0)  |  EDIT  |  Top↑

2010.02.03 (Wed)

pythonでファイル出力+python-twitterでフォローする

寝たいので軽く書きます。

まずpythonでファイル出力。
プログラムのせるだけ。

# ファイル出力
print "Test of output to file."
output_list = ["hello", "world", "cloud_1919", "chest"]
file_name = "output_test.txt"
fw = open(file_name, "w")
for out_list in output_list:
fw.writelines(out_list+"\n")
fw.close()


次にpython-twitterで任意のアカウントをフォローする方法。
twitter.Apiの中にある、CreateFriendshipという関数を使えば良い。
引数はフォローしたいアカウント名。

# Create Frendship
api = twitter.Api("AccountName", "Password")
api.CreateFriendship("holy_Knight_api")



時間がないのでサラッと。
ちなみに、python-twitterの練習用アカウント作りました。

   「holy_Knight_api」

という名前なので気が向いたらフォローお願いしまふ。
とりあえず、週末にはフォローしてくれた人をフォローし返すプログラムを作る予定。

テーマ : プログラミング ジャンル : コンピュータ

01:07  |  プログラミング系  |  TB(0)  |  CM(0)  |  EDIT  |  Top↑
 | BLOGTOP | 

 
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。