ラベル Python の投稿を表示しています。 すべての投稿を表示
ラベル Python の投稿を表示しています。 すべての投稿を表示

2015/09/21

簡単に通知を組み込めるPushbulletがおすすめ


自分向けのアプリを作って自動化している時に、意外と悩むのが通知の部分。処理が異常となりリカバリが必要なとき、処理が正常に完了したことを教えてほしいとき。

以前はGmailのSMTPゴリゴリしてメールで飛ばしていましたが、如何せんコードが複雑になると同時にGoogleアカウントのパスワードをスクリプトの中に直書きというのもあまりよろしくない。(最近だとこの方法もできなくなったみたいですね)

そんな通知難民の最近の味方にPushbulletというサービスが流行ってるみたいです。
最もPushbullet自体はPC/Macとモバイル・デバイスのクリップボードやり取りを簡単に行うものらしいですが、API自体すごく簡単に使えるので通知サービスとしても使えます。

randomchars/pushbullet.py · GitHub

やり方は非常に単純で、ライブラリを読み込み、APIキーを設定するだけ。
上記Githubのページに書いている通りにすれば即座に利用可能です。

複雑なコードを書かずとも、通知部分はたったの1行で可能なので既存のアプリや自分用のツール類に組み込むのもとっても簡単にできます。
これは便利です。

当然ですが、Pushbulletの通知を受け取るためにはスマフォやPCにPushbulletのクライアントをインストールしておく必要があります。

2013/12/22

Pelicanのテーマ変更の方法

スクリーンショット 2013 12 22 11 52 43

Pelicanのインストールは前回行ったが、デフォルトのテーマは味気ないのでコミュニティが作成したテーマを導入してみましょ。

$ sudo apt-get install git-core

GitHub上にたくさん公開されているので、Git Cloneします。

$ git clone --recursive https://github.com/getpelican/pelican-themes ~/pelican-themes

 

Pelican上で現在「設定することができる」テーマを一覧にするコマンド使って確認します。

$ pelican-themes -l

simple

notmyidea

現在はsimpleとnotmyideaというテーマを設定することが可能ということがわかります。
先ほどGit Cloneした大量のテーマの中から好きなモノを選んで「設定することができる」状態にします。

 

$ sudo pelican-themes -i /home/ubuntu/pelican-themes/gum

$ pelican-themes -l

gum

simple

notmyidea

するとgumのテーマを設定することができるようになりました。

 

実際のテーマの設定方法はpelicanconfig.pyを直接編集することで可能です。
好きな部分に 

THEME = "gum"

と記載して後は make html と make serveで確認すれば一番上の画像のようにテーマの変更が可能です。

 

 

・・・ここまで書いておきながらすべてのテーマがこの方法で変更できるというわけではないみたい。
このへん奥深いです。

静的サイトジェネレーターのPelicanを使ってみた

スクリーンショット 2013 12 22 10 28 53

最近Jekyll(ジキル)というRuby製のファイルジェネレータがホットですね。
Python製でなにかないかと探したらJekyllと対になるHyde(ハイド)というそのまんまの名前の物もありましたが、ココはドキュメントなどが充実しているPelicanを導入してみたので備忘録です。 
便利なのですが日本語の情報があまりないのがネックです。より好みしないのであれば素直にJekyllとかのほうがいいかと。 

 

Pelican documentation

サーバはUbuntuです。 

 

1,pipの導入

$ sudo apt-get install python-pip

 

2,Pelicanのインストール

$ sudo pip install pelican

もしMarkdown記法で記述したい場合はついでに下記もインストール

$ sudo pip install Markdown

 

3,サイトの作成

$ pelican-quickstart

いくつかの簡単な質問が表示されるので、それに対して適当な入力をしてあげるとあら簡単!出来上がりです。
もともと静的サイトジェネレータなので、QuickStartの中にFTP使う?Dropboxで公開する?Amazon S3で公開する?という質問があることはおもしろい。

ちなみにこの質問はシンプルな設定ファイルに持っているので後からエディタで編集可能です。

 

記事の作成についてはこちらを参考にしました。
Python - Pelican ブログのインストール方法 - Qiita [キータ]

好きなエディタで、content/my-first-post.md を編集(作成)します。

Title: 最初のPelicanブログ
Date: 2013-09-17 22:58
Category: Pelican
Tags: pelican, python
Slug: my-first-post
Author: 5t111111
Summary: この記事の要約です。

ハローペリカン
================================
ペリカン
--------------------------------
### ペンギン
Pelicanを使った最初の記事です。

書き上げたMarkdownをHTMLに変換

$ make html

そして作り上げたものを実際にブラウザで確認してみます。

$ make serve

スクリーンショット 2013 12 22 10 59 47

PythonのSimpleHTTPServerを利用しているのでポート8000番でアクセスできるようにしておく必要はあります。

 

ね、簡単でしょ。
テンプレートエンジンにJinja2を利用しているので自分の好みに編集することも可能ですし、GitHub上に多くのデザインテンプレートが公開されてます。 

2013/01/01

今年はPython年だそうです

スクリーンショット 2013 01 01 18 22 22

2013年の今年の干支は巳だそうです。
ええ。Pythonですね。

これからはじPy(個人的にはみんPy)するならいい機会だと思います。
日本人だからRubyとか意味わからないですし、Pythonの生みの親がGoogleからDropboxに移籍したのも記憶に新しいじゃないですか。

と書いたものの、Windows環境で仕事してるとコマンドプロンプトとSQLばかりでプログラミングなんて長らく触ってないですね。
もう構文すら忘れてしまった感じもあるので、これを機会に勉強し直すのもいいかも。 

全てのwebエンジニアがPythonを勉強するべき2013年到来

なんだか突然日本だけPython熱が上がったりしたら海外のデベロッパーには意味不明に見えちゃうんでしょうね。
そういえば、あけましておめでとうございます。今年もよろしくお願いします;−p 

2011/05/01

herokuに続け! 各種PaaSプラットフォーム


HerokuというRuby on Railsが動作するRuby専用のPaaSプラットフォームがSalesforceに買収された。

何がおもしろいってRuby on Railsを動作させるためのハードやOSというレイヤーはプロバイダーであるHerokuが面倒を見る。開発者はコードを書いてGit経由でHerokuにアップロードするだけでHEROになることができる。
面倒な部分を全部プロバイダーが面倒見てくれるのがPaaSの強み。

そのPaaSプラットフォームもRubyのHeroku以外にも色々出来ていたので備忘録。

Heroku | Ruby Cloud Platform as a Service
 Ruby on Railsを提供するPaaS
 無料プランからニーズに合わせてサイジング可能

Google App Engine - Google Code
 JavaおよびPythonを利用可
 データベースが特殊。無料枠+従量課金

Windows Azure
 .Net系のPaaSなのかクラウドOSなのか…

Tiny Flock - Django Hosting
 Python/Djangoを提供するPaaS
 無料プランあり。情報がないってレベルじゃねーぞ!

PHP Fog - Reliable Cloud Platform. Built for PHP.
 PHPのPaaS
 デプロイはGit。PHPで作られたアプリケーション(WordPress等)なら何も心配なく動くらしい。

DotCloud
 何でもうごくPaaS
 PHP/Python/Ruby/Java… データベースも選べる。

こんな所でしょうか。
実際にはまだまだたくさんありますが、AzureやGAEは別にすると標準的な技術で構築されているので、万が一の際に他のプラットフォームに移行が出来なくは無いです。

手に職じゃないですが、プラットフォームがあっても言語を使いこなせないと…


2011/04/25

PythonからWindowsのコマンドを呼び出す方法

C:\>python

Python 2.5.4 (r254:67916, Dec 23 2008, 15:10:54) [MSC v.1310 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.

>>> import subprocess
>>> p= subprocess.Popen(['ver'],shell=True, stdin=subprocess.PIPE ,stdout=subprocess.PIPE)

>>> for i in p.stdout.read().split('\n'):
... print i
...
Microsoft Windows [Version 6.1.7601]

ね。簡単でしょ。
Pythonから別のプロセスを呼び出すのはSubProcessというモジュールを使ってやるのがスマートらしい。

Python2.5系では

subprocess.Popen(['ver'],shell=True, stdin=subprocess.PIPE ,stdout=subprocess.PIPE)

1つ目の引数が実行したいコマンド。今回はWindowsのビルドバージョンを表示するコマンド。
2つ目の引数はコマンドプロンプト上で実行されるコマンドの場合True。他のアプリを呼ぶ際などはいらないです。
3つ目、4つ目は入出力に関して。

実行結果が複数行にわたる場合でも p.stdout.read().split('\n') で改行ごとに区切ってあげれば1行ずつ取り出せます。
気を付ける点は 上のプログラムだとこの後にもう一回 p.stdout.read().split('\n') をやったとしてもその際には変数pの中は空っぽになっているという点。(エラーは出ません)
元々Pythonは代入ではなくて参照なので、1回出力されたモノは2回目も利用する場合は再度呼び出すか、さらに別の変数に格納してあげる必要があります。

これに気がつかないで結構苦労しました;p
さて、これでPython2.5系からWindowsのコマンドを呼び出して標準出力の結果を取り込むんでごにょごにょできます。
あえて2.5系でのやり方を調べたのは、Python2.7系からもっと簡単な方法が用意されているから。

Python2.7系では同じくSubProcessモジュールに check_output が用意されています。
もっと単純にコマンドを呼び出せてリターンも扱いやすいです。

もっとも、WindowsXPとかで動かすことがあるならPy2exeを使うならPython2.5系をお勧めする理由という事もあるかもしれないので、2.5系で書けることなら書いた方がいいかもね;p


2011/04/23

Py2exeを使うならPython2.5系をお勧めする理由

”このアプリケーションの構成が正しくないため、アプリケーションを開始できませんでした。アプリケーションを再度インストールすることにより問題が解決する場合があります。”

Pythonで作成したスクリプトを実行するためにはPythonの実行環境が必要です。
せっかくPythonで簡単にコーディングできても、実行環境を用意する手間を考えたり社内規定的なモノでインストールが出来なかったりするとせっかく生産性の高いPythonの意味がないと。

でも大丈夫。
Py2exeというソフトを通してあげるとPythonのスクリプトをWindowsで直接実行可能なexe形式に変換してくれます。もちろん動かすPCにPythonをインストールする必要はありません。

py2exe - Browse /py2exe/0.6.9 at SourceForge.net
コーディングしたPythonの環境と同じバージョンをダウンロードしてください。

setup.pyファイルを書く必要ありますが、コンパイルというかexeに変換してやれば自動でimportしているモジュールも書き出されて利用することが出来ます。
素晴らしいですね。

で、それをWindowsに持って行って実行したら上のエラーが。

エラーが起きる原因は非常に単純で解決するにはVisual C++ 2008 再頒布可能パッケージ (x86) を実行するPCにインストールしておけばOKです。
が、せっかくPythonを実行形式に変換しておきながら動かすPCにVC++ 2008のランタイムを入れるのはナンセンス…

解決する方法はございます。

Python2.5系でコーディングすること。

というのもPy2exeで書き出されたファイルを実行する際に動的にPythonをコンパイルされているようなのでその際にPython2.6以降はVC++ 2008をコンパイラとして利用していることが原因。
なのでPython2.5系ならVC++ 2003をコンパイラとして利用しているので実行ファイルと同じディレクトリにMSVCR72.dllがあれば実行できます。
(VC++ 2005以降はOS側に問い合わせに行くみたい)


実際にPython2.5系でコーディングしたモノをPy2exeで実行ファイルに変換すると自動でMSVCR72.dllが作成されます。なのでフォルダを丸っと圧縮して利用したいPCに持って行けば動作します。

補足しておくとこのエラーが出るのは素のWindowsXP/Windows Server 2003です。
さらに言えばアンチウイルスソフトなどでもこのVC++ 2008ランタイムはよく使われているので、そういうモノも入っていない可能のあるPCということです。

簡単な処理からWindowアプリまで、Pythonライフを楽しんでください;p


2010/03/19

Twitter Streaming API で1日分の日本語Tweetを観測してみた

はい。
スクリプト自体はコピペです。

なんとなくツイッターStreaming APIを試してみた - xmallocのプログラミングノート

 

ただ、このままだとHTMLがターミナルにだぁーーーー!って出てくるだけなので、Printの部分をファイルにwriteするように変更しています。

Twitter Streaming APIはPublicTimeLineなどを垂れ流すという斬新なAPI。
TwitterのStreaming APIが正式版に - @IT
完全なデータはGoogleやMicrosoftが大金を払って検索エンジンなどに組み込んでいますが、間引きされた情報でTwitterのアカウントさえもっていれば特別申請しなくても利用できる、画期的なAPIです。

そして、2010/03/18 13:30分から2010/03/19 13:30分までの24時間スクリプトを動かし放しにして、日本語Tweetを記録してみました。

$ wc tsa/tweet.csv
314217  2015948 45283267 tsa/tweet.csv

wcコマンドで24時間分のTweetを記録したtweet.csvファイルにはなんと 31万行…
テキストだけで45MB!
こいつぁーすげぇーや!

これだけの日本人の生の発言を収集しようと思うと普通に考えればかなり大変だと思います。
とは言っても、1日で日本人が31万件しか発言してない訳はないです。Twitter全体の1日あたりの発言数が5,000万件で、利用者の14%が日本人とすると今回収集できたデータは数十分の1程度です。

それでもなかなかおもしろみのあるデータではないかなと。

 

それでは適当に…

1日で非公式RTがつぶやかれる割合は

$ grep 'RT' tweet.csv | wc
26070  250917 6363083

つまり2万6,000回’RT’という単語が含まれたTweetがされているので、すごいアバウトに見て大体8%くらいですかね。

 

1日でリプライ(@)が使われるつぶやきの割合は

$ grep '@' tweet.csv | wc
131893  943502 20996333

かなり多いですね。
全体の42%は誰かに届くメッセージらしいです。

 

1日で見かけるリンク(http://)の割合は

$ grep 'http://' tweet.csv | wc
36506  289115 6717488

11%はリンク付きらしいです。
かなりURLを目撃しているみたい。

 

そんな感じでなかなか面白いデータだと思います。
もうちょっと活用できないか試行錯誤してみたいと思います。

2010/02/14

Python版Processing “NodeBox”

NodeBoxというものがあるらしいので使ってみた。
これはPythonでコーディングできるProcessingのようなもの。

NodeBox | Home

MacのCore Imageなどを非常に簡単に読み出せる代わりにMac依存な面もあるので、現在はMac専用です。
ひじょーに簡単にビジュアライゼーション出来るので、Python知っててなんかこういう風なもをさっと作りたい人には向いているかも。
ただ、この分野で手軽に作るというとProcessingがメジャーなのでこれからがんばってやろうと思うなら、ProcessingかFlashかopenframeworksかメジャーなものを使用した方が良いと思います。
Pythonベースでコーディング出来るので、手を抜きやすくて簡単っちゃ簡単。

上のやつもNodeBox 1.9系で作ってみました。
直接movやPDFで書き出しも出来るのでそのあたりの小回り具合は良い感じです。ただし、その書き出したmovファイルを直接Youtubeにアップロードしてもエラーが出るので、一度別のソフトで変換してあげる必要があります。

最新のNodeBox 2系はWelcome | NodeBox 2はUIそのものも大きく変更されているみたいです。
チャンスがあったら触って見たいかも。
逆にPython云々なので、重たくなりそうな処理の場合はちゃんと考えて実装してあげないとすぐ落ちちゃいます;p


2010/01/07

Twitter Bot を Google App Engine に移した件

とにかく無価値なBotですが、そんな無価値なBotのためにRackspace Cloudのインスタンス代(約1円/時間)を払うのももったいないと言うことでGoogle App EngineへBotを移行させてみました。

もともとUbuntu Server上で動かしていたBotは

  • Pythonで組まれたスクリプト
  • 形態素解析に MeCab
  • 定期実行はCron

という構成でした。

Google App EngineはネイティブにPythonを動作させることの出来る希有なサービスですので移行は非常に単純でした。ほぼコピペ。
このほぼというのがミソで、一部追加しないといけないことがあるそうなので、素直に追加しておきましょう。

ちなみにキモの python-twitter は 0.6 を使用していますが、Api クラスにおいてファイルキャッシュを使っているために、素のままでは GAE で使えません。今回は以下のような Monkey patch を twitter.Api を利用する前に書いて、その場しのぎを…

link: GAE/Python で Twitter bot を作る(準備編) - SPEAKER BREAKA
詳しくはリンク先をご覧ください。関数を一つ定義し直す必要がありますが、コピペで終わるので全然面倒じゃありません。
(コピペで貼ろうとしたら、Macのエディタだとうまくいかない・・・)

 

1番の問題点の形態素解析。
MeCabはLinux等のプラットフォームに最適化されていますし、品詞の切り分けには巨大にしないでも辞書データが必要になります。
Google App Engine上でMeCabを動かすなんて到底無理な話ですので、いつぞや話題になったYahoo日本語形態素解析を思い出したわけです。
Yahoo! 日本語形態素解析APIを Python から使う | itFun.jp

さらに、Ubuntuでは苦労して書いたCrontabも、Google App Engineなら結構単純。
ただ、スペルミスには注意してくださいね;p
Google App Engine/Python で cron.yaml | itFun.jp

 

ここまでは良いとしても少し疑問に思っていた点として、Python から Twitter へ投稿するこういうので利用するライブラリ達。
解決法としては、一回ローカルにダウンロードでしてそれを一緒にアップロードしてしまうという当たり前のようなこと。
今回はPython-twitterを使うに当たって

  • twitter.py
    twitter.pyc
  • simplejson/
    __init__.py
    __init__.pyc
    _speedups.c
    decoder.py
    decoder.pyc
    encoder.py
    encoder.pyc
    scanner.py
    scanner.pyc
    tool.py
.pycは少なくとも1回は実行すると作られるファイルです。
もしかしたらこれがないと上手く動作しないかも・・・

ちなみに、今回自分の構成はmain.pyに記述して
  • BeautifulSoup.py
    BeautifulSoup.pyc
    app.yaml
    cron.yaml
    index.yaml
    main.py
    simplejson/
    twitter.py
    twitter.pyc
    yomi.py

こうなってます。
今回はYahoo日本語形態素解析のXMLから必要なデータを抜き出さないといけないのでBeautifulSoup(Beautiful Soup: We called him Tortoise because he taught us.)を準備してください。
以上で終わり。
ね、簡単でしょ。


2010/01/03

Google App Engine/Python で cron.yaml


まず、声を大にして言いたいのは cron.yamlです。
clonじゃありません。cronです。
何回やっても出来ないような場合は、ここが間違っていないか確認してみた方が良いです。

記述の方法などは公式を見るのが1番
Python 用の cron を使用したスケジュール タスク - Google App Engine - Google Code
ちなみに、descriptionの部分は上の画像の“postTwitter”の部分に当たります。

あと、cronで呼び出すurlですが、そのURLに対してapp.yamlで指定したものが対応しているのでapp.yaml側できちんと指定してあげる必要があります。
今回みたいに5分ごとに実行するとかの場合は気にする必要はありませんが、指定した時間に動作させたい場合はタイムゾーンの指定を忘れずに。(UTCで逆算して指定するのもありかも)


2010/01/02

Yahoo! 日本語形態素解析APIを Python から使う

以前作ったTwitter Botですが、動いている内容はとても単純。
ここまで単純ならわざわざMeCabを使わなくても良いのではと思ったので、以前話題になったYahoo! Japanが提供するWeb APIの日本語形態素解析を使ってみました。
Yahoo!デベロッパーネットワーク - テキスト解析 - 日本語形態素解析

まず下準備として、YahooのIDを持っておく必要があります。意外とGoogle依存なのでYahoo! Japanのアカウントの用意で手間取ったのは内緒:p
あと、Yahoo! Japanのアカウントは各国共通じゃないのでFlickrとかの海外Yahoo!サービスのアカウントじゃログインできないので注意してください。

あとは、非常に簡潔にまとめてくださっている方がいらっしゃいますので、そちらを読んでいただければ・・・
YahooWebAPI"日本語形態素解析"を使って日本語文をひらがなに変換、索引用語のソートに利用 - Object Design

これだと、別にファイルを用意しないといけないので、少し改造して予め入力してあげようと言うことで

word = u'庭には二羽ニワトリがいる。'
yomi = reading(word)
print (word+'->'+yomi).encode('utf-8')

ちなみに1行目に #coding:utf-8 をつけてないと文字化けします。
すると結果は

$ python yomi.py
庭には二羽ニワトリがいる。->にわには2わにわとりがいる。

ここまでしてくださっていると説明の必要もありません。

 

帰ってくる答えを変えたい場合は def reading(text,appid=appid,results='ma',filter=''): のfilterの引数に日本語形態素解析に戻り値として欲しい品詞番号を入れておくと、名詞だけを抜き出せたりします。
あとは、形態素解析のどれを拾うかの設定

帰ってくるXMLはこのような形なので

<word_list>
<word>
<surface>庭</surface>
<reading>にわ</reading>
<pos>名詞</pos>
<baseform>庭</baseform>
</word>

ソースコード中の

readings=soup('reading')

に対応しています。
が、このまま変更しても結果は帰ってこないので

postdata= {
'response' : 'surface,reading',

この response の引数を ‘’ にするか、結果として欲しいものを指定してあげる必要があります。
何が変わるかというと、例えば形態素の基本形を知りたいは reading を baseform に変えてみると

$ python yomi.py
お待ちしております。->お待ちするておるます。

こんな風に、帰ってくる形が変わります。

Web APIですが、扱いやすいですし環境依存しない(MeCabの場合は最低条件としてMeCabが動く環境が必要)ので面白いんじゃないかな。
特に1つあたりの情報量の少ないTwitterとか・・・Twitterとか・・・には好都合な気がします。ちなみに制限は1つのリクエストあたり 100KBまでで、24時間以内に50,000リクエストとなっております。


2009/12/31

以上を組み合わせて、Twitter Botを作ってみた。

screenshot by wonderlanddalicejp.

なんとか年内にまとめあがったよ。
これまで延々と書いてきた事をまとめて、目標のTwitter Botを作ってみました。

まずは、動かすためのプラットフォーム作り。
botなので常時動いている方が良いので、サーバを。もちろんレンタルサーバとかでも良いのですが、Linuxサーバのお勉強もかねて今回はHaaSを提供しているRackspace Cloudを利用してみました。

Rackspace Cloud に申し込んでみた。

まさかの国際電話で本人確認されたのでびびったと言ったら無かったね;p
でも、質問内容はYes or Noで答えられる程度のこと(だったと)思うので、心配はそこまでしないとでも良いかと。

 

次は実際にLinuxサーバを起動してみるよ。
これもAmazon EC2を使ったことある人からしてみると驚くくらい簡単。

RackSpace Cloud のインスタンスを起動する

Linux系の選択肢は豊富ですが、使ったことがあるのはUbuntuだけなのでUbuntuで。

 

Twitter Botを作りたいのでとりあえずTwitterをスクリプトから操作出来るようにしないといけない。

Python から Twitter へ投稿する

なんでPythonかというと、自分はPythonくらいしか分からないから。Pythonだってろくに分かってないです;p
最近話題のRubyとかならPython以上に豊富に情報がそろっていると思います。

 

さて、PythonからTwitterへ投稿できるようになったので、次はBotらしい機能を作ってみようと。
Botらしいで悩んでみましたが、今回はとりあえず自分(@dalice)の投稿内容をカタカナに変換して投稿し直すbotにしようと言うことで、日本語形態素解析として話題沸騰中のMeCabさんを使ってみました。

Ubuntu Server に MeCab をインストールする

Python等の言語から簡単に扱うことの出来るのが特徴です。
iPhoneの日本語入力やMacのSpotlightなどで使われている実績のある処理系です。中の人の最近の作品はGoogle 日本語入力だそうです。

 

さて、ここまでPythonでスクリプトを作ってみましたが、Botなら定期実行してこそ。
そんなわけでLinuxなら標準で動いているCronの使い方を少しだけお勉強。

Ubuntu Server で cron を使う

ここまで来れば出来たも同然!

 

そうして、作ったのはこちらです。

dalice-yomi (dalice_yomi) on Twitter

Cronで指定した周期ごとにDaliceの発言を拾ってきて、MeCabを通してカタカナに。それをdalice_yomiというアカウントにポストするだけです。
何の価値もないbotですが、プログラミングとか、Linuxとかよく分かってない自分でも1週間かからずにここまで作れちゃいました!

次は世のため人のためになりそうなものを作ってみよう;-)

2009/12/30

Python から Twitter へ投稿する

柴田 淳 (3)
3消去法的定番書
5知識の整理と Python3への準備に役立つ
3初級者向け、ただし...

もちろん、投稿できると言うことはTimeLineの取得とかいろいろ出来ます。
しかも、とっても簡単。

python-twitterというものがすでに用意されているので、それを導入してimportしてあげれば何の苦労もなくPythonからTwitterの各種APIを操作できます。

python-twitter -Project Hosting on Google Code

素直にここからダウンロードしてきて、展開した方が早いです。
Ubuntu系をお使いの方ならapt-getでインストールすることも出来ます。

sudo apt-get install python-twitter

バージョンは今日現在0.6がインストールされます。
tar.gzをダウンロードした場合は

python setup.py build
python setup.py install  

以上でインストール終了。
あと、simplejsonが必要になるとか言われる場合があるので 、その場合は素直にダウンロードしてきて、上同様にbuildしてinstallしましょう。

Python Package Index : simplejson 2.0.9

 

実際の使い方は本当に簡単。

import twitter
api = twitter.Api(username='TwitterのID', password='TwitterのPass')

とりあえずこれは共通。
これで、Twitter APIへアクセスする事が出来るようになりました。

タイムラインを表示してみる。

statuses = api.GetFriendsTimeline()
for s in statuses :
 print s.text.encode('utf-8')

これで、いつもTwitterクライアントで見ているのと同じフォロワーのポストが表示されます。
ちなみに最後に.encode('utf-8')をつけているのはきちんと表示させるために必要なので。ただ、これは環境によって変わってくるので注意してください。

投稿してみる。

post = sys.stdin.readline()
ret = api.PostUpdate(post.decode("utf-8"))

これで、実行すると文字入力できて、それを投稿してくれる・・・はず。

これ以外の詳しい関数などはPythonでtwitterを試してみたっす。 : kishi-r.comにまとめてくださっているのでそちらを参考にしてください。

正直ここまで簡単に使えることに驚いたです。

2009/12/29

Ubuntu Server に MeCab をインストールする

日本語形態素解析として話題沸騰中のMeCabをServerに導入して、ごにょごにょしたいと思った今日この頃。
ちなみに、MeCabの

作業手順はとっても簡単。
作業環境は最近おなじみの Rackspace Cloud上のUbuntu Server 8.04です。
Rackspaceの導入なんかは

Rackspace Cloud に申し込んでみた。
RackSpace Cloud のインスタンスを起動する

を参考にしてみて下さい。

 

実際の作業手順なんですが、jkl.lomo.jp » ubuntu9.04 で mecab を Python から使うまで。がまとめてくださっているので、そちらを・・・
少し違う部分もあるので、一応書いてみます
あと、ついでにPythonからMeCabを扱えるようにするためのやつも導入しています

vi /etc/apt/sources.list
 deb http://cl.naist.jp/~eric-n/ubuntu-nlp intrepid all
 deb-src http://cl.naist.jp/~eric-n/ubuntu-nlp intrepid all

wget http://cl.naist.jp/~eric-n/ubuntu-nlp/8ABD1965.gpg -O- sudo apt-key add -

apt-get update

apt-get install mecab

apt-get install mecab-naist-jdic-utf8

apt-get install libmecab-dev

mecab --version
 mecab of 0.98pre3

wget http://downloads.sourceforge.net/project/mecab/mecab-python/0.98/mecab-python-0.98.tar.gz

tar xf mecab-python-0.98.tar.gz

cd mecab-python-0.98

apt-get install g++

apt-get install python-dev

python setup.py build

python setup.py install

大体こんな感じ。
これで使えるようになる・・・はず。
環境によってはSudoをつけないとうまくいかないかも。

ちなみにmecab-pythonのフォルダの中に入っているtest.pyは少し修正が必要で、#coding:utf-8をつけてやる必要があります。
そうすればきちんと実行することが出来て

# python test.py
0.98
太郎 名詞,固有名詞,人名,名,*,*,太郎,タロウ,タロー,,
は 助詞,係助詞,*,*,*,*,は,ハ,ワ,,
この 連体詞,*,*,*,*,*,この,コノ,コノ,,
本 名詞,一般,*,*,*,*,本,ホン,ホン,,
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ,,
二 名詞,数,*,*,*,*,二,ニ,ニ,,
郎 名詞,一般,*,*,*,*,郎,ロウ,ロー,,
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ,,

2009/12/02

Python でファイルを読み込んでちょっと加工する

3行で。

file = open(raw_input("name:"))
for i in file:
    print "#",i,

別に何一つ難しいことはないのですが、数百行近いコードにコメントを書けようと思うとめんどくさいので書いてみた。

C:\>python read.py
name:read.py
# file = open(raw_input("name:"))
# for i in file:
#       print "#",i,

実行すると対象のファイル名を入力して、ちょびっと加工した結果がダァーとプロント上に表示されます。
長い場合はファイルに書き出すようにしてやるとおk

2度は使う機会のなさそうなモノですが、作業効率を上げるためにこういったモノを非常に簡単にかけるというのは便利。

2009/11/11

Python で Fizz Buzz に挑戦

1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzzBuzzz
16

1から100までの数をプリントするプログラムを書け。ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、3と5両方の倍数の場合には「FizzBuzz」とプリントすること。

ルールは以上。
非常に簡単ですね。

Pythonで書くのも非常に簡単でございやした。

for i in range(1,101):
    if i%3 == 0 and i%5 == 0:
        print 'FizzzBuzzz'
    elif i%3 == 0:
        print 'Fizz'
    elif i%5 == 0:
        print 'Buzz'
    else:
        print i

これを思いつきましたが、後から調べてみるともっとスマートにする方法として

if i%3 == 0 and i%5 == 0:

if i%15 == 0:

に変更したりとか、究極ワンライナーで頑張るとか…

 

これは非常にベーシックなやつで、集合演算だのどうのこうのかなり豊富なバリエーションがあるようです。

2009/11/07

Snow LeopardでGoogle App Engine/Pythonを使う方法

screenshot by wonderlanddalicejp.

MacBook Proを買って早くも2ヶ月。
実は一番最初にインストールしたソフトはGoogle App Engine SDKでした。
そして今日やっと、やっと起動に成功!

 

Mac OS X 10.6には標準でPython 2.6の環境がインストールされているのですが、Google App EngineのSDKで必要になるのはPython 2.5の環境。
Windowsの場合は標準だと”変なもの”が入っていないので、そういう点では素晴らしい;p

Snow LeopardにPython 2.5の環境をインストールするにはMacPortsというものを使うと楽らしい。
実際にこれでインストールしたのですが、なんだかいまいち分からん。
このMacPortsを使うためにはXcodeをインストールしておく必要があるそうですので、インストールディスクからXcodeを入れておいてください。

MacPortsはこちらから。The MacPorts Project -- Download & Installation
SnowLeopardの文字がリンクになっているのでそちらをクリックするとSnowLeopard用のdmgファイルがダウンロード出来ます。

インストールが完了すると一応アップデートとか言う儀式をこなす。

$ sudo port selfupdate
$ sudo port sync

その後PythonとPythonのデフォルトバージョンを変更するソフトをport経由でインストールします。

$ sudo port install python25 python_sellect

時間が結構かかるのでまったり待ちましょう。
インストールが完了すると実際に切り替えてみます。

その前に、ターミナルでPythonを起動してみて起動するPythonのバージョンを確認してみてください。 バージョン切り替えは

$ sudo python_select python25

これを実行したら「Selecting version "python25" for python」と表示されると思います。
後にもう一回ターミナルでPythonを実行すれば標準で起動するのがPython 2.5.4が起動するようになります。

 

ここで、Google App Engine SDKを起動して実行するとエラーが減ってうまくいくかと。
それでも、エラーがでたあなた。自分の事です。

実はGoogle App Engineのプロジェクト名は小文字じゃないとだめです。
なので“Hello”とかいう プロジェクト名をつけると

Fatal error when loading application configuration:

というエラーがapp.yamlで発生します。
文字コード関連なので、他の原因としては文字コードや日本語文字が含まれていることがあるそうですが、一番単純なのは、プロジェクト名に大文字を含めていること。

なので“hello”というプロジェクト名をつけると、上の画像のようにちゃんと実行できました:-)

 

Google App EngineがPython 2.6に対応していればこんなにめんどくさい形にならなくてすんだのに・・・

 

via SnowLeopardでGAE(Python 2.5)開発環境をつくるまでを走り書き - matuダイアリー

2009/07/19

Pythonでパスカルの三角形に挑戦

Triangle by Velo Steve.
Triangle on Flickr - Photo Sharing!

パスカルの三角形(-さんかくけい、Pascal's triangle)は、二項展開における係数を三角形状に並べた物である。
パスカルの三角形 – Wikipedia

がんばって力業でやってみた。
とにかく力業。

#coding:utf-8

def pascla(low):
    list=[[1],[1,1]]
    if low==0 or low==1:
        return list
    while low-len(list):   
        for i in list[-1:]:
            counter = len(i)-1
            locallist = []
            for j in range(counter):
                locallist.append(i[counter-1] + i[counter])
                counter-=1
            locallist.append(1)
            locallist.insert(0,1)
            list.append(locallist)           

    return list

ans = pascla(10)
for i in ans:
    print i

すごく読みにくい上に無駄なことをやっているなぁ~と思うけど、手直しの仕方を知らない。

結果の答えは

[1]
[1, 1]
[1, 2, 1]
[1, 3, 3, 1]
[1, 4, 6, 4, 1]
[1, 5, 10, 10, 5, 1]
[1, 6, 15, 20, 15, 6, 1]
[1, 7, 21, 35, 35, 21, 7, 1]
[1, 8, 28, 56, 70, 56, 28, 8, 1]
[1, 9, 36, 84, 126, 126, 84, 36, 9, 1]

こんな感じ。
これじゃ直角三角形に…

 

あと、気になったんだけど、パスカルの三角形 – Wikipediaこの項目の”パスカルの三角形の最初の10段は以下のようになる。”の部分って11段あるように見えるけど…よく分からない。

2009/07/16

Pythonでフィボナッチ数列に挑戦

この数列はフィボナッチ数列と呼ばれ、最初の数項は
    0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, …
である。定義より、どの項もその前の2つの項の和となっている。
フィボナッチ数:wikipedia
 と言うものを暇だったのでPythonで書いてみた。
#coding:utf-8

def fibo(n):
    list = range(2)
    if n==0 or n==1:
        return n
    for i in range(n):
        if not(i==0 or n==1):
            list.append(list[i] + list[i-1])
    list.remove(0)
    return list
      
ans = fibo(10)
print ans
今回の場合 10回までの答えをリストで返してくれる。
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]

正直自信がないし、もっときれいに書くこともできると思う。
アルゴリズムも何も考えてない酷いコードの例。