CakePHP 再入門(1)

ASP.NET MVC の連載記事の関係から、他の MVC ものも抑えておかないと、と言いますか、CakePHP は抑えないと今日びの WEB ものはできないですよね~。かどうかは分かりませんが…

おととし CakePHP 祭りに行った頃から注目はしていたのですが、最初のチュートリアルをした後で止まっておりました。MVC 自体は色々と興味があるところなのですが、果たして PHP で実装をする側に立つことが今までなかったもので。

さて、ASP.NET MVC の場合は Model は、LINQ to Entities やら独自の Model やらを選べます。と言うのも、ひとつの画面にひとつのテーブルだけが表示される、ってことはほとんどないんですよね。

例えば、Amazon のトップページを例にとれば、

  • 最近発売された商品の一覧
  • あなたにおすすめの商品の一覧
  • カテゴリ一覧

な感じで、いくつかのテーブルから検索結果を出します。

このようにする場合は、ASP.NET MVC の Model の場合には、

public class TopModel
{
	// 最近発売された商品
	public TNewGoods { get; set; }
	// おすすめ商品
	public TYourGoods { get; set; }
	// カテゴリ一覧
	public TCategories { get; set; }
}

な感じで、3 つのテーブルを内部に持つ必要があるわけです。

これって、CakePHP でできるんだっけ? ってのが、いままでの私の疑問でありました。
CakePHP の Model って、ひとつのテーブルがバインドされている、という固定観念があったわけですね。

が、違います。当たり前だったのですが、CakePHP でも、複数のテーブルをモデルの含めることができます。モデルというか、コントローラーから複数のモデルをビューへ渡すことができます。

/controllers/goods_controller.php

<?php
class GoodsController extends AppController {
	var $name = 'Goods';
	var $uses = array('NewGood','YourGood','Category');

	function index() {
		$this->set('NewGoods', $this->NewGood->find('all'));
		$this->set('YourGoods', $this->YourGood->find('all'));
		$this->set('Categories',$this->Category->find('all'));
	}
}
?>

のように作成しておくと、

http://servername/goods

で次のような画面が表示できます

この時のビューは次な感じ。
/views/goods/index.ctp

<h1>NewGoods</h1>
<table>
	<tr>
		<th>Id</th>
		<th>name</th>
		<th>price</th>
	</tr>
</p>
<p>
<?php foreach ($NewGoods as $item): ?>
	<tr>
		<td><?php echo $item['NewGood']['id']; ?></td>
		<td><?php echo $item['NewGood']['name']; ?></td>
		<td><?php echo $item['NewGood']['price']; ?></td>
	</tr>
<?php endforeach; ?>
</table>
</p>
<p>
<hr/>
<h1>YourGoods</h1>
</p>
<p>
<table>
	<tr>
		<th>Id</th>
		<th>name</th>
	</tr>
</p>
<p>
<?php foreach ($YourGoods as $item): ?>
	<tr>
		<td><?php echo $item['YourGood']['id']; ?></td>
		<td><?php echo $item['YourGood']['name']; ?></td>
	</tr>
<?php endforeach; ?>
</table>
<hr/>
</p>
<p>
<h1>Categories</h1>
<table>
	<tr>
		<th>Id</th>
		<th>name</th>
	</tr>
</p>
<p>
<?php foreach ($Categories as $item): ?>
	<tr>
		<td><?php echo $item['Category']['id']; ?></td>
		<td><?php echo $item['Category']['name']; ?></td>
	</tr>
<?php endforeach; ?>
</table>

複数の Model(NewGoods,YourGoods,Categories)を、コントローラー GoodsController でひとまとめにして、ビューで表示させるという方式です。

ASP.NET MVC の場合は、View に対してひとつの Model しか引き渡せないので、このあたりの動きが違います。逆に言えば、CakePHP の場合は、ひとつの Model にひとつのテーブル(あるいは複数のテーブルのクエリ結果)を渡すことになるので、このあたりが「違い」ますね。

カテゴリー: 雑談, CakePHP | 2件のコメント

newQX でクリップボードを使う

先日、やっとこさ newQX のマクロが起動しました…と、言いますか、なんか拡張子を vbs にしてもマクロが起動しなかったんですよね。

な感じで「マクロファイルを編集していないため実行できません」ってエラーがでるのです。サンプルマクロを動かしても駄目という現象。

で、結果的には「その他」→「書式設定」の「テキスト/キーワード」のところで、テキスト種別が「マクロ」になっていないと、マクロが動かないという…別の書式設定をコピーしたものだから、ここが上書きになってしまっていたのですね。

そんな訳で、めでたくマクロが動きました。

な、だけでは詰まらないので、早速 QX32 に似た環境を作ろうと画策しております。
まずは、編集中のフルパスをクリップボードにコピーしたい、からスタート、ってことなんですが、いきなり躓いてしまいました。QX32 のマクロでは clipboard$ という関数(プロパティ?)があったのですが、newQX だと vbscript ベースになっているので、このあたりの実装がないッ!!! 困った。

wscript/WSH で使う場合にもクリップボードは難問がありまして、IE を使ったり Excel を使ったりするのですが、一番手っ取り早いのがクリップボード用の COM を作ってしまうことです。
レジストリへの登録は必要なのですが、一度、登録してしまえば他にも再利用できるし、というわけで C# で作りました。

C# で COM コンポーネントを公開する – てっく煮ブログ
http://d.hatena.ne.jp/nitoyon/20080731/c_sharp_com

上記を参照しながら C# でクラスを作る、そして登録。登録する場合は regasm なんですね。このあたりは、人に渡す時にちょっと問題があります(管理者権限で動かさないといけないという)。

ひとまず、C# のコードはこんな感じです。

namespace QxNet
{
    public class Clipboard
    {
        /// <summary>
        /// クリップボードをテキスト形式で取得/保存
        /// </summary>
        public string Text {
            get {
                return System.Windows.Forms.Clipboard.GetText();
            }
            set {
                System.Windows.Forms.Clipboard.SetText( value );
            }
        }

        public void SetText(string text)
        {
            this.Text = text;
        }
        public string GetText()
        {
            return this.Text;
        }
    }
}

ProgId などの属性を付けていませんが、まあ、これでも大丈夫。

登録する場合は、管理モードでコマンドプロンプトを起動して

regasm QxNet.dll

のように登録します。

そして newQX のマクロは以下な感じで。

'現在のフルパスをクリップボードへ保存
sub FilenameToClip
	set clip = createobject("QxNet.Clipboard")
	clip.setText(ActiveDocument.fullname)
end sub

CliateObject してからクリップボードにフルパスをコピーします。

こうすると先のコマンドラインへのファイル名渡しが楽なんですよね。
名前は「QxNet」にしてあるので、他にも QX を拡張するような .NET ライブラリを作っていこうかなと。

実行ファイルなんかは、後日公開します。

カテゴリー: 開発, QXエディタ | newQX でクリップボードを使う はコメントを受け付けていません

LINQ to Entities では ToString が使えない

Entity Data ModelとLINQ to SQL は同時に使えない | Moonmile Solutions Blog
http://www.moonmile.net/blog/archives/1688

前回の続きということで、Entity Data Model の使いどころ、というか私が陥った落とし穴を紹介します。

さて実は、ASP.NET MVC の連載記事を書いている途中で、Html.DropDownList メソッドを使いたかったのですね。連載記事のほうは、Entity Data Model を使うようにしているので、DropDownList に連結するならば、やっぱり「データバインド」ですね、って形にしたかったのです。

以前の ASP.NET コントロールであれば、

dropDownList.DataSource = items ;

みたいな形でデータソースを指定するわけですが、HTML ヘルパーメソッドの場合は、

Html.DropDownList( “states” );

のように ViewData を使ってバインドさせる方法もあれば、

Html.DropDownList( “states”, Model.items );

のようにモデルのパラメータを使って設定する方法もあります。

そこで都道府県コードをバインドしようかなぁ、と思って、都道府県のテーブルを作成。

create table TStates (
	id int, -- 都道府県コード
	name varchar(20) -- 都道府県名
)

そして、コントローラーに以下のコードを作成。

public ActionResult StatesList()
{
    Models.mvcdbEntities ent = new Models.mvcdbEntities();

    var items = from t in ent.TStates
                select new SelectListItem
                {
                    Value = t.id.ToString(),
                    Text = t.name
                };
    ViewData["states"] = items;

    return View();
}

DropDownList は、SelectListItem のコレクションしか受け付けないので、あらたに new して追加します。データベースから検索できたほうがいいので、LINQ が便利ですよね。って訳で、LINQ を使っています。
SelectListItem は、Text は表示文字列、Value は値なんですがブラウザなので ToString で変換しています(ここが落とし穴です)。

さて、これを動かすと、

▼画像001

20110121_01.jpg

ってなエラーがでます。

System.NotSupportedException はユーザー コードによってハンドルされませんでした。
  Message=メソッド ‘System.String ToString()’ は LINQ to Entities では認識されないため、ストア式に変換できません。
  Source=System.Data.Entity

なんだか良くわかりませんが、ToString は動きません…ってな具合です。

どうやら、「LINQ to Entities」ってのが動いているようで、仕方がない「LINQ to SQL」を動かそう。という訳で、他の方法で試してみます(これを同じアプリケーションに組み込もうとして、前回の落とし穴なんですなw)。

public ActionResult StatesList()
{
    DataContext dc = getDataContext();
    var items = from t in dc.GetTable<TStates>()
                select new SelectListItem
                {
                    Value = t.id.ToString(),
                    Text = t.name
                };

    ViewData[&quot;states&quot;] = items;


    return View();
}

のように、LINQ to SQL のほうを動かすとですね。すんなり動きます。う~む。

▼画像002

20110121_02.jpg

何処が引っ掛かっているのかというと、ToString なんですね。どうやら、LINQ to Entities の中では、この手の他のメソッドが動かないらしい。しかも、LINQ の実行が遅延されるので(LINQを定義した箇所ではなくて実際に実行される場所という意味で)、aspx 内でエラーが発生するという不思議な具合になります。

いずれ、LINQ to SQL が LINQ to Entities に全て置き換わるのか…は不明なのですが、こんな風に LINQ 内で文字列処理をしようとするとちょっと不思議な現象に出会います。

なので、LINQ to Entities を使っている場合は、

public ActionResult StatesList2()
{
    Models.mvcdbEntities ent = new Models.mvcdbEntities();
    List<SelectListItem> items = new List<SelectListItem>();
    foreach (var it in ent.TStates)
    {
        items.Add(new SelectListItem
        {
            Value = it.id.ToString(),
            Text = it.name
        });
    }
    ViewData[&quot;states&quot;] = items;

    return View();
}

のように、一度 コレクションに代入しないといけないという…ダサい感じに…てなわけで連載のほうでは却下しました(苦笑)。このあたりの説明が主目的ではないので orz

さて、この現象ですが、実は Visual Basic 2010 では起こりません。

Function StatesList() As ActionResult
    Dim ent = New mvcdbEntities
    Dim items = From t In ent.TStates
                Select New SelectListItem With {
                    .Value = t.id,
                    .Text = t.name
                }

    ViewData("states") = items

    Return View()
End Function

のように VB を使って書くとすんなり動きます。

これは、ToString 等の変換を使っていないからなんですね。.Value = t.id のところで、自動的に Integer から String に変換されているわけで、これがうまく動く要因なのです。C# の場合は、自動変換が効かないから ToString メソッドを使うところでアウト、なんですなぁ。

というわけで、同じ LINQ を使っている場合でも、Entity Data Model(LINQ to Entities)を使っている場合と、LINQ to SQL を使っている場合とで区別しないといけないとう、ちょっと不思議な落とし穴(実装が違うといれば、わかりやすいんですが、コード的には LINQ だけなので見つけづらい)。

カテゴリー: ASP.NET | 2件のコメント

Entity Data ModelとLINQ to SQL は同時に使えない

ASP.NET MVC では Entity Data Model と LINQ to SQL が同時に使えません。つーか、同時に使うな、ってのがホントなんでしょうが、まぁ、Html.DropDownListFor メソッドが、あっちが動いたのに、こっちが動かない、という現象があったもので(この話が後日)。

まだ、公開されていませんが

連載! コードで学ぶ ASP.NET MVC アプリケーション開発入門 | Code Recipe | MSDN
http://msdn.microsoft.com/ja-jp/asp.net/gg490787

の次回は、Entity Data Model なんですね。

ですが、日経さんで出している「ひと目でわかる ASP.NET MVC」のほうは、実は、LINQ to SQL を使っているのです。
このあたり、執筆時に悩んだのですが、書籍のほうにはデータベースのややこしいところを取り込みたくなかったわけです。

ADO,NET Entity Data Model が ADO.NET の後継であることはわかっていたのですが(多少、不勉強ということもありますが)、このあたり、モデルを直結させてしまうとモデル自身の効用がわかりづらくなる、っていうのと、モデルの中にテーブルを含めるとちょっと、ってな感じで、薄さ(苦笑)を優先させたのです。

さて、

Entity Data Model の良いところは、SQL Server 2008 と直結しているところです。Visual Studio 2010 上でデザイナが動くのは、Entity Framework としては一部のところで、本音のところはコマンドラインで DDL と直結させたりする「親和性」のところにある気がします。DI コンテナなんてのを想起させます。なので、リレーション(外部キー)や主キーなんかが結構な役割を果たしています。

一方で、LINQ to SQL ってのは、(乱暴に言えば)オブジェクト指向に持ち込んだ SQL みたいなもので、ラムダ式やら無名関数やら拡張メソッドやらで、F# の影響を強く受けているわけですね。つまりは、プログラム言語からのアプローチ。

この話、どちらが「勝ち」という訳でもないわけで、ADO から続く DataSet やら、オブジェクト指向アプローチの O/R マッピングやらの歴史があるので、こんな感じなんですね。他にも、データベースには、ストアドプロシージャとビューがあるわけで、このあたり、「ビジネスロジック」を何処に置くのかとか、ある意味で「開発者に任せるのか」、「データベース管理者に任せるのか」というアプローチの違いも反映されていたりします。

だからという訳ではないんでしょうが(笑)、

こんな風に、Entity Data Model を追加した後に、LINQ to SQL も使いたいかなぁ、と思って追加すると、

20110119_01.jpg

ありゃ、LINQ to SQL のほうで、コンパイルエラー

20110119_02.jpg

20110119_03.jpg

どうやら、テーブルをインポートしたときの、TProduct クラスで既に _id が使われている模様。

実は namespace が両方とも、MvcApplication7.Models という形で Models に入っていて、TProduct クラスは partial で作ってある(分割されている)ので、クラス名の重複よりも、各メンバの重複が優先されてエラーになっているんですね…って、ややこしい。

ちなみに、別のテーブルをインポートすると大丈夫なので、正確には、

「同じテーブルを Entity Data Model と LINQ to SQL では使えない」

ですかね? namespace を変えればよいのかな?

 

 

カテゴリー: ASP.NET | 1件のコメント

ASP.NET MVC 3 で Entity Data Model を利用する

実は、ASP.NET MVC 2 と全く同じですね。

  • データベースから Entity Data Model を作る。
  • モデルを利用したコントローラーを作成する。
  • リストなどを表示させるビューを自動生成する。

ってな手順です。

こんな風なモデルを使って、

20110118_06.jpg

次のようにコントローラーを書いておきます。

このあたりは、ASP.NET MVC 2 と同じ。


        public ActionResult List()
        {
            Models.mvcdbEntities ent = new Models.mvcdbEntities();
            var model = ent.TProduct;
            return View(model);
        }

View の追加では、ASP.NET MVC 2 と違うのは、View engine の選択ですね。

これもデフォルトが Rasor になっています。ビューエンジン(レンダリングエンジン)は、ページごとに切り替えられるようです。

20110118_07.jpg

で、自動生成した結果がこれ。


@model IEnumerable<MvcApplication1.Models.TProduct>

@{
    ViewBag.Title = &quot;List&quot;;
}

<h2>List</h2>

<p>
    @Html.ActionLink(&quot;Create New&quot;, &quot;Create&quot;)
</p>
<table>
    <tr>
        <th></th>
        <th>
            name
        </th>
        <th>
            price
        </th>
        <th>
            cateid
        </th>
    </tr>

@foreach (var item in Model) {
    <tr>
        <td>
            @Html.ActionLink(&quot;Edit&quot;, &quot;Edit&quot;, new { id=item.id }) |
            @Html.ActionLink(&quot;Details&quot;, &quot;Details&quot;, new { id=item.id }) |
            @Html.ActionLink(&quot;Delete&quot;, &quot;Delete&quot;, new { id=item.id })
        </td>
        <td>
            @item.name
        </td>
        <td>
            @item.price
        </td>
        <td>
            @item.cateid
        </td>
    </tr>
}

</table>

実行結果は、ASP.NET MVC 2 と同じ。

20110118_08.jpg

Rasor のレンダリングエンジンを使うと、「@なんとか」で C# や Visual Basic のコードが書けます。

今までの aspx のコードは「<% … %>」で書いていたので、「@{ … }」と書けて便利。と言いますか、メリットはそれだけなのか?ちょっと、これはもう少し調べてみないとわかりませんが。

ただ、aspx と Razor の違いは、

  • aspx は、HTML 形式の中に、<% … %> でコードを埋め込む。
  • Razor は、HTML 形式の中に、@{ … } で、コードを埋め込む。
  • Razor は、コードの中に、ヒアドキュメント風に <text>…</text> で HTML 形式を埋め込む。

のところですね。

プロパティを使って表示するところは <%: item.name %> から、@item.name のように「@」マークひとつで書けるので、コードがすっきりしているといえばそうなのですが、PHP に慣れてくると、<?php … ?> で十分かぁと思ってしまうからなぁ。

このあたりは、

CakePHP: 高速開発 php フレームワーク。 Home
http://cakephp.jp/

との相互運用(相互補完?)とか考えてみたり。

 

 

カテゴリー: 開発, ASP.NET | ASP.NET MVC 3 で Entity Data Model を利用する はコメントを受け付けていません

ASP.NET MVC 3 RTM をインストール

MS さんのところで、ASP.NET MVC の連載記事を書いている訳ですが、

連載! コードで学ぶ ASP.NET MVC アプリケーション開発入門 | Code Recipe | MSDN
http://msdn.microsoft.com/ja-jp/asp.net/gg490787

このベースは書籍なもので、基本的なところは「ASP.NET MVC 2」なんですよね。

で、実は、「ASP.NET MVC 3」が着々と準備されており、現時点で RTM までやってきました。

待望の ASP.NET MVC 3 RTM リリース! NuGet, WebMatrix, Orchard などなど Web 開発が新次元へ – THE TRUTH IS OUT THERE – Site Home – MSDN Blogs
http://blogs.msdn.com/b/chack/archive/2011/01/14/asp-net-mvc-3-webmatrix-iis-7-5-express-sql-compact-4-orchard-are-released.aspx

実は、次々回の内容が(執筆は今週だったり)、HTML ヘルパーメソッドに関するところで、まさに View のところ。今回、大きく更新される View の新しい構文「Razor」なところですね。

先行き、記事として残るわけですから、読むときには既に ASP.NET MVC 3 はリリースされているわけで。。。ということで、現在 RTM 版をインストール中です。

Windows Web App Gallery – Install an App
http://www.microsoft.com/web/gallery/install.aspx?appid=MVC3

お手軽に、 Web Platform Installer 3.0 を使います。

20110117_01.jpg

20110117_02.jpg

“Razor”の紹介 - ASP.NET向け新ビュー・エンジン - @IT
http://www.atmarkit.co.jp/fdotnet/scottgublog/20100714razor/razor.html

を見る限り、単なる(?)レンダリングが変わるだけなので、コントローラーやモデルなどは変化しません。

というか、MVC パターンとしては、Model と Controller はそのままで、View を独立をして変えられないといけませんね。

プロジェクトは「ASP.NET MVC 3 Web Application」が増えています(リリース後には、「アプリケーション」になるかと)。

20110118_01.jpg

プロジェクトの最初のダイアログが少し変わっています。

「Internet Application」 を選択して、ひな型を作成ですね。

View engine は、自動生成される View(Index.aspxやAbout.aspx)に適用されるレンダリングです。デフォルトが「Razor」になっています。

20110118_02.jpg

一見、何も変わらないように見えるのですが、ソリューションエクスプローラーのアイコンが変わっています。

20110118_04.jpg

Index.aspx のソースもこんな感じに。

20110118_05.jpg

で、試しに Entity Data Model を使って表示させてみると、ってのが次回。

 

 

 

カテゴリー: 開発, ASP.NET | ASP.NET MVC 3 RTM をインストール はコメントを受け付けていません

Microsoft MVP Visual C++ を受賞しましたよ

mvp.png

しばらく、ブログが停滞していましたが、再開。

という訳で、一発目には、Microsoft MVP を受賞しましたよ、という訳で。

堂々と Visual C++ の受賞ですッ!!!(自画自賛…ちなみに、MVP って自薦なので)

… って、Visual C# やら Visual Basic やらの執筆の中で、やっぱり、Visual C++ なんですかね?

自分の本で Visual C++ 関係というと、

51ygGsf0wJL__AA115_.jpg51P45IXVwzL__SL160_PIsitb-sticker-arrow-dp,TopRight,12,-18_SH30_OU09_AA115_.jpg

な訳で、あとは大抵が C# と Visual Basic だったりします。

そんな訳で、これから一年間、Visual C++ に貢献し続けるのか、それとも(?)な私ではありますが、

ひとまずッ!!! 例のプラダシリーズ(というか、アリスシリーズ、「プラダ」と書くと、宣伝のコメントがわんさかと書き込まれるのですが、それもまた一興ということで)、の続きを、Visual C++ でやればよいかなと考えています。

かつてのプラダシリーズはこちら、

プラダの鞄を直接あげるのが値渡し | Moonmile Solutions Blog
http://www.moonmile.net/blog/archives/1431

プラダの鞄をおねだりするのが参照 | Moonmile Solutions Blog
http://www.moonmile.net/blog/archives/1434

アリスはプラダの中古がお嫌い | Moonmile Solutions Blog
http://www.moonmile.net/blog/archives/1442

少し C++ 寄りにして書き続けていきましょうか。どうせ、MVP になったのだから、もっと「深み」にはまってしまうほうが専門性が増してよいかも、とか(いや、巷から離れるって感じでもあり、痛し痒しなんですが)。

カテゴリー: 仕事 | 7件のコメント

自分のタイムラインを表示

DS から Twitter をするために、簡単な PHP でプロキシを作成。

<プロキシのコード>

require_once(&quot;./twitteroauth.php&quot;);
require_once(&quot;./twitter.config.php&quot;);

$url = &quot;&quot;;
if ( isset($_POST['url'])) {
	$url = $_POST['url'];
}
$i = 0;
foreach ( $_POST as $key => $val ) {
	if ( $key != 'url' ) {
		if ( $i == 0 ) {
			$url .= '?';
		} else {
			$url .= '&';
		}
		$url .= &quot;$key=$val&quot;;
		$i++;	
	}
}

$twi = new TwitterOAuth($CONSUMER_KEY, $CONSUMER_SECRET, $ACCESS_TOKEN, $ACCESS_TOKEN_SECRET);
$twi->format = 'jsonp';
$res = $twi->OAuthRequest( $url, 'GET', null);

header(&quot;Content-Type: text/plain&quot;);
echo $res;

かなり、怪しいコードですが、

  • DS 側で、$.post を使って、url を送信
    → POST で送っている。
  • プロキシ側で、GET に直して twitter.com へ送信
  • 送信結果を、DS に返す。

ってな感じです。実際は、ツイートの場合は、POST になるので、このあたり、先行き書き換えが必要ですが。

OAuth 認証のところは、twitter.config.php に、直書きになっているので、あまりにも惨い仕様なんですがw、このあたりは、データベースに切り替えになります。DS からは Cookie を使うかなと。

20101227_01.jpg

そんな訳で、自分のタイムラインだけは見られる状態になったかと。

写真だと見えにくいですが、背景がついています。

カテゴリー: 開発, 子供ツイッター | 3件のコメント

美女Linux 公開

美女リナックス | Linuxコマンドをもっと素敵で身近に
http://bijo-linux.com/

20101225_01.jpg

何気にブログパーツを作っていた、美女 Linux が公開になりました。

ツイッター、ブログ等を見ると、賛否両論…というか、意味ないぞこれ!?っていうのが目立ちますが(苦笑)、それはそれアレはアレですね。おそらく大丈夫です、何が?

20101225_02.jpg

ブログパーツのほうは、

http://bijo-linux.com/blogparts/

にある通り、script タグの貼り付けで OK です。

  • Windows デスクトップガジェット
  • iGoogle のパーツ

は、早々に準備、ということで。

 

 

カテゴリー: ブログパーツ | 2件のコメント

DSi でツイッタークライアントの製作の続き

子供用ツイッター(kidtwi.jp)ってことで、考えていたけど、ひとまず、大人用 DS twitter クライアントをにするべく邁進中。

なんとなく方式ができたのでメモ。

  • PC でツイッターアカウントを作成する。
  • PC で、kidtwi.jp にアクセスして、アプリからのアクセス認証を受け付ける。
    → 本当は、DS からいいんだけど、ひとまず、PC から。
  • でもって、アクセストークンを WEB に保存。
    → 本当は、DS やクライアントに保存すべきなんだが、OAuth とプロキシの関係で、サーバーに保存。
  • DS から kidtwi.jp にアクセス。内部で、twitter.com にアクセス。
    → XMLHttpRequest の兼ね合いでプロキシ用の PHP を作る。
    → プロキシを作るほうが、後々キャッシュ等が便利。

20101219_01.jpg

ひとまず、アクセストークンをサーバーで保持してしまう…と、何のために OAuth 認証しているのか分からなくなってしまうんだが(苦笑)、まあ、ひとまず。

カテゴリー: 開発, 子供ツイッター | DSi でツイッタークライアントの製作の続き はコメントを受け付けていません