開発」カテゴリーアーカイブ

Twitterizer で UserStream を取得する。

みむらです。結構簡単だったのでぺけぺけ。

 


1.Visual Studio を立ち上げてプロジェクトを作る。

 

image

image

でけた。

 


2.Package Manager を起動して、 Twitterizer を入れる。

 

使い方および起動方法は以前書いた記事を : NuGet で簡単にパッケージを導入する

image

image

だん。

 


3.Twitter にアプリケーションを登録する。

 

https://dev.twitter.com/apps へアクセス。

image

画面の右上にある 「Create a new application」 をクリック。

 

image

こういう画面が出てきます。

 

ここでは、次の項目を入力します (なお、各項目は日本語でも問題ありません。):

項目名

説明

Name アプリケーションの名前を入力します。
10文字です。
やぎ、そしてやぎさん、ゆうびんさん。
Description どういうアプリケーションかという説明文を入力します。
10文字~200文字です。
めーと鳴いて、朝と夜を知らせるが、たまに昼間も鳴いてTL を荒らす。
WebSite ウェブサイトのアドレスを入力します。 http://mimumimu.net/
Yes, I agree 上に表示されている、Developer Rules Of The Road に納得できるのであればチェックをします。  
CAPTCHA 下に表示される2つの文字列を入力します。  

 

image

 

適当に入力したら、一番下の 「 Create your Twitter application 」 をクリックします。

image

こんな感じで、アプリケーションが登録されます。

 

この際、

image

ページの下の方の OAuth settings に表示されている、
Consumer keyConsumer secret をメモしておいてください。

(なお、このアプリケーションは記事投稿前に削除しているので、Key と Secret は無効です。

 


4.コードを書く。

 

Visual Studio に戻ってコードを書きます。

image

 

適当に書いてみたのが下記のコード:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
using Twitterizer;
using Twitterizer.Streaming;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            //
            // 先ほどメモした ConsumerKey と ConsumerSecret をここに入力。
            //
            string consumerKey = "GfX2lsqHQAyObh1vPaTUuQ";
            string consumerSecret = "ffLnE720PHwBHeZShGSEw6qTj5UQD1KgMoAqT9IhvuQ";

            //
            // アクセストークンを取得するために、ブラウザを立ち上げて認証ページを表示させる。
            //
            OAuthTokenResponse req = 
                    OAuthUtility.GetRequestToken(consumerKey, consumerSecret,"oob");
            Process.Start(OAuthUtility.BuildAuthorizationUri(req.Token).ToString());

            //
            // キーを入力させる。
            //
            Console.Write("YOUR KEY : ");
            string pin = Console.ReadLine();

            //
            // 認証情報を OAuthTokens に格納する。
            //
            OAuthTokenResponse actToken =
                    OAuthUtility.GetAccessToken(consumerKey, consumerSecret, req.Token, pin);
            OAuthTokens token = new OAuthTokens
            {
                ConsumerKey = consumerKey,
                ConsumerSecret = consumerSecret,
                AccessToken = actToken.Token,
                AccessTokenSecret = actToken.TokenSecret
            };

            //
            // 第1引数に認証情報、
            // 第2引数にクライアント名
            // 第3引数に取得に関する条件等を指定(今回は null)
            //
            var Stream = new TwitterStream(token, "侵略でゲソ", null);

            Stream.StartUserStream(null, null,
                    (x) => { Console.WriteLine("ID : " + x.User.Name + " - " + x.Text); },
                    null, null, null, null, null);

            System.Threading.Thread.Sleep(-1);
        }
    }
}

 

ちょっと一言:

この際、プログラムが動作しないようであれば、

大抵が .NET Framework 4.0 Client Profile を利用していることが原因なので、変えておきます。

 

1.プロジェクトファイルを右クリックして、プロパティを選ぶ。

 

image

 

2.「対象のフレームワーク」を 「.NET Framework 4」に変える。

 

image

読み込み直すかどうかのダイアログが出るので、「はい」をクリックします。

 


5.実行する。

 

image

 

「連携アプリを認証」をクリック。

image

 

見づらいですが、表示された番号と同じ物をアプリケーションに入力します。

image

うまくいくとこのように、ツイートがたらたら流れてきます。

 


2012/05/30 編集:

サンプルコードにおいて、

while(true) {} でループを回すと負荷がとんでもないことになるので、

メインスレッドを停止させるようにコードを修正しました。

NuGet で簡単にパッケージを導入する。

案外知られていない気がする。

Ruby や Python では、パッケージを簡単にインストールして利用する方法があって、

Ruby では gem
Python では easy_install

がこれに該当しますかね。

 

.NET にも NuGet という同様の仕掛けが存在し、
利用することが出来ます。

.NET開発の新標準「NuGet」入門(前編) - @IT
詳細な解説についてはここのあたりを見ておくと良いかと思います。

 

注:対象は Visual Studio 2010 以降の Visual Studio に限ります。


分からない人向け:

たとえば、今から Twitter の機能を利用したソフトウェアを作ろうとあなたが思ったとき、
以下の選択肢から一つ選ぶことになると思います。

1.自分で OAuth の認証書いて、アクセスするライブラリを作る。
2.インターネットから既存のライブラリをとってくる。

現代においては、教育目的を除いて 1 を選ぶことは殆ど無いかと思います。
(気に入る形に出来ない場合や、そもそも無い場合は作ることにはなりますが。)

 

となると、現実的な回答としては、2となりますが、
インターネットから探してきて、インストールして・・っていうのは面倒で、
カタカタっと名前を打ったりして、簡単にインストール出来た方がいいわけです。

インストーラが面倒くさいということも考えられるでしょうし、
そもそも、インストーラが無くて、自分で組み込まなければならない場合は面倒になりますし、
友人に教えながら作業するという場合や、雑誌にやり方を載せる場合などにおいては、
友人や読者にファイルのありかを教えなければなりませんし、
複数台に組み込む時なども・・・・ とまぁ、非常にナンセンスな訳です。

 

そんなわけで、 Python の easy_install や Ruby の gem
そして、この記事で触れる .NET の NuGet などのパッケージ管理ソフトウェアを用いることにより、
単純明快でかつ高速に、ライブラリを用意して使い始めることが出来ます。

また、ライブラリに更新があった場合、手動で入れた場合はまたインストールをしなければなりませんが、
大抵こういうパッケージ管理ソフトでは、アップデートも簡単に行える仕様が備わっています。

 

という感じで、長文になりましたが、
導入~更新 まで、ライブラリの利用に関するあらゆることを簡単に使えるようにした物。
それが、パッケージ管理ソフトウェア ということになります。


というわけで本題。

 

1.導入

http://visualstudiogallery.msdn.microsoft.com/27077b70-9dad-4c64-adcf-c7cf6bc9970c
上記URL より、 Download をクリックしてダウンロード、インストーラを起動します。

 

image

上のような画面が出ますので、インストールをクリックし、導入を完了させます。

 

2.開発を始める。

image

いつものように、ソリューションを開きます。

 

3.パッケージを導入する。

image

メニューバーの 「ツール」 → 「Library Package Manager」 → 「Package Manager Console」 をクリックします。

image

コンソールが立ち上がった。

 

今回は例として、

http://www.twitterizer.net/
上記URL にて公開している、「Twitterizer」を導入してみます。

 

image

Install-Package twitterizer

と打って、Enter で実行。

 

image

自動的に依存関係が解決された状態で、参照にライブラリが加わり、使えるようになる。

 

3.コード書いて動かす。

 

image

 

とりあえずこんな感じ。

 


というわけで、適当に超基本的なコマンドだけ、対応表にするとこんな感じなのかなぁ。

コマンド

NuGet

gem

easy_install

hoge をインストール Install-Package hoge gem install hoge easy_install hoge
hoge を更新 Update-Package hoge gem update hoge easy_install –U hoge
全部更新 Update-Package gem update easy_install –U
hoge を削除 Uninstall-Package hoge gem uninstall hoge  

NuGet のコマンドについては、

http://www.atmarkit.co.jp/fdotnet/chushin/nuget_01/nuget_01_02.html
上記URL に大体まとまっているかと思います。

 

そんな感じで。であであ。

SyntaxHighlighter でコードを示したあと、ずたずたに書式が崩れる不具合の対応

どうもみむらです。

とっても見づらいブログ記事で本当に申し訳ございませんでした。
変に改行とかが入って、おそろしく見づらかったことかと思います。

 

ということで、今回はそれの犯人と、
修正の方法。

 

原因:

<pre> </pre> 以降の HTML データが上手く処理されず、
テキストデータとして改行がなされたところに <br /> たぐが自動挿入されたため。

 

対策:

WordPress 内の wpautop というフィルタによって自動挿入されるため、

http://urbangiraffe.com/plugins/disable-wpautop/
上記URL より入手できるプラグインを導入して処理を除去。

 

結果:

対策前:

image

上記のように、文と文が離れていて大変読みづらい状況でした。

 

対策後:

image

本来、当方が記述した際の正しい記述にて表示が行われ、
段落ごとに文章がまとまり、見やすくなっています。

 


というわけで、
WordPress で <pre> を利用してコードを記述している方で、
ずたずたにスタイルが崩れてしまった場合、利用してみてはいかがでしょうか。

ちなみに、RSS フィードに対しても wpautop は適用され、
改行が挿入されますが、
このプラグインでは RSS フィードに対しても有効であり、
かつ、Wordpress をアップデートしても有効となるため、かなり有用かと思います。

Python + Django してみた。 MTV Model について

どうも書いてて、 MVC っぽいようで、MVC っぽくないので調べてみると、

FAQ 全般 — Django v1_0 documentation
http://djangoproject.jp/doc/ja/1.0/faq/general.html

ここいはく、 Model – Template – View ということで、 MTV モデルというんだそうな。

MVC モデルでは、

Model : データとデータに対する手続きを記述。
View : Model のデータをユーザが見られるように表示する。UI への出力。
Controller : ユーザの入力に対して応答する。処理が必要なら Model に依頼し、表示が必要なら View に依頼する。

http://ja.wikipedia.org/wiki/Model_View_Controller

という感じなのですが、

Django を MVC として見ようとすると、
個人的に View のロジックと表現技法が分離されていない印象をうけて、
Controller もDjango 全体をさすようにに見えて、どうも本来扱う部分を超えてしまう。

というように私には見えてしまってしょうがない感じだったのです。

 

そこで、
最初に示したページにある、 MTV モデルに合わせて考え直してみると、かなりしっくり来て、

Model : Database に格納してあるデータ、および付随する処理(models.Model より提供)
Template : テンプレートファイルによってデザインされた各ページのデザイン
View : リクエストがあった URI ごとに、どのページを見せるかを記述する処理。

ということで、Django を MVC として見て、脳内に疑問符が浮かんだ方は、
公式ウェブサイトで提唱されている、MTV モデル、つまり、
View を Template そして Controller を View とすることで、
Django の設計思想がモデルとしてばしっと来るのではないでしょうか。

Python + Django してみた。 その4.データベース。

体力が切れてきた。やばい。みむらんです。

データベースを使ったサンプルってことで、何かやろうかと思ったのですが、
小さいものが見当たらないので、使い方だけ。

参照 : http://djangoproject.jp/doc/ja/1.0/topics/db/queries.html

 

1.models.py でモデルを定義しよう

Entry クラスにぼこぼこ書くだけで定義完了です。

class Human(models.Model):
    name = models.CharField(max_length=12)
    description = models.TextField()
    age = models.IntegerField()

たとえば、人の名前を管理するなら、こんな感じでしょうか。

name CharField(max_length=12) 最長12文字の文字列
description TextField() 文字列
age IntegerField() 数字

 

2.データベースへの反映

settings.py に、各種設定を済ませておきます。

変数名 設定内容
DATABASE_ENGINE データベースエンジン ‘mysql’ / ‘sqlite3’ など
DATABASE_NAME データベース名 ‘human_db’
DATABASE_USER ユーザ名 ‘mimuran’
DATABASE_PASSWORD パスワード ‘hogehoge’
DATABASE_HOST サーバホスト名 ‘example.com’
DATABASE_PORT ポート番号 ‘1234’

 

一通り済ませたら、

$ ./manage.py syndb

で、実データベースに反映します。

 

3.データの読み書き

書き込み:

data = Human()
data.name = u'みむらん'
data.age = 19
data.description u'ぱいそんよくわかってない系だんし'
data.save()

インスタンスを生成して、ごにょごにょ詰め込んだ後、 save メソッドを呼び出して保存。

すべて読み出し:

all = Human.objects.all()

条件を付けて読み出す:

mimuran = Human.objects.filter(name=u'みむらん')

とりあえず、こんな感じで。