Q's software -3ページ目

Twitter API

Twitter の API を作りました。

なんででしょうね?理由は、

  • 動かないサンプル公開している人が意外に多い。
      意外に悩まされるんですよね。なんで動かないんだろうってずっと考えているんだけど、根本的に違うじゃんこれ!みないなのに遭遇したからかな~。あと PHP の本質なのか?変数のスペルミスに悩まされる!違う変数としてそのまま動き始めるから探すのが面倒なんだよね。コンパイルエラーを出して欲しい!

  • これ以上アプリを作るたびにコピペを繰り返すのも芸がない。
      include とか require とかのパスをコントロールの仕方がよくわからなくて同一ディレクトリにコピーで使っていたけど、それもアプリが増えればメンテ性が悪いので

  • Twitter の API の思想が気にいらない。
      API っていうからには Web の専門的な部分は API 内部包み込まなきゃ意味がないだろ!って Twitter の API に不満をもったりしています

くらいかな~。

というこで、
  • ソースコード ( TwitterAPI.php , twitteroauth.php , oauth.php )
      基本的には TwitterAPI.php を作りました。twitteroauth.php と oauth.php は拾ってきました( abraham's twitteroauth at master - GitHub からダウンロードです)。Twitter の OAuth を利用しようとしたら一番扱いやすいんじゃないかな?と思います。ただ、twitteroauth.php は少し変更しています。まだ完成してないですけど、でも動いている関数もあります。動くようになったら、ちゃんと関数の仕様とサンプルコードも書いて公開しようと思います。


...そうか、今公開すると俺も動くかどうかわからないプログラムを公開することになるんだな(^^;

文字列とポインタ

C 言語のポインタを理解する の応用編。文字列とポインタの関係について説明します。

C 言語を学ぶと初期に出てくる文字列です。
char のポインタだけ、文字列って特殊な呼び方をすることが多いですね。ただ、文字列と単純に char のポインタです。同じことを名前を変えて 2 つ覚える必要張りません。文字列で???ってなる人はあまりいませんが、文字列の配列で???となったり、ゴゴゴってりメモリ破壊したりする人が現れたりします。

なので、ポインタの基礎概念とポインタの基礎文法と照らし合わせ、文字列の仕組みをしっかり理解します。概念なんで、まずは、文字列で
char *string = "Hello World.";

というプログラムは、以下のようなメモリ構造になります。
$Q's software

ただ、Hello World のように固定の文字列なら問題はありませんが、人の名前をいれるとかは人によって文字列の長さが違うような場合は、以下のようにプログラムを書きます。

char *your_favor;
char *entry_girl_01 = "Aya Ueto";
char *entry_girl_02 = "Nozomi Sasaki";
char *entry_girl_03 = "Haruka Ayase";

// Which girl do you like?
your_favor = malloc(strlen(entry_girl_03));
strcpy(your_favor, entry_girl_03);
printf("You love %s \n", your_favor);


これは、プログラムを動かすと以下のようにメモリが書き換わります。
  • 変数宣言直後

      $Q's software

  • strcpy 直後

      $Q's software

だけど、あの 3 人の美女から 1 人を選べなんて無理です!って浮気野郎は、以下のようにプログラムを書きます。

int i;
char **your_favor;
char *entry_girl_01 = "Aya Ueto";
char *entry_girl_02 = "Nozomi Sasaki";
char *entry_girl_03 = "Haruka Ayase";

// Which girl do you like?
your_favor = malloc(3);
your_favor[0] = malloc(strlen(entry_girl_01));
your_favor[1] = malloc(strlen(entry_girl_02));
your_favor[2] = malloc(strlen(entry_girl_03));

strcpy(your_favor[0], entry_girl_01);
strcpy(your_favor[1], entry_girl_02);
strcpy(your_favor[2], entry_girl_03);
printf("You love ");
for (i = 0; i < 3; i++) {
printf("%s ,", your_favor[i]);
}

どうしても 3 人ともあきらめられないので 3 人確保できるように char** で 3 人分の場所を用意してから、個々の名前を置く場所を確保します。
これは、プログラムを動かすと以下のようにメモリが書き換わります。

  • 変数宣言直後

      $Q's software

  • strcpy 直後

      $Q's software


忘れられがちなのは、char** で char* の配列を確保していることでしょうね。
※ entry_girl_0(1|2|3) は時代を反映させて個人で修正してください。

人気ブログランキングへ ← 読んだらプチっとお願いします。

体重管理表

下記のアドレスに移転しました。

http://qs-software.jpn.org/?p=27

よろしくお願いします。