バーション2 APIを利用してついっぷるフォトに画像をアップロードする (OAuth Echo認証) - C#

注意
この記事で紹介している方法は 2010年時点の方法です。現在はついっぷるフォトはサービス終了のため動作しませんので、ご注意ください。
OAuth Echoの仕組みを利用して ついっぷるフォトに画像をアップロードしてみます。
ライブラリ等のコードはこちら

Twitter へのアプリケーション登録とアクセスキーの取得

Twitterへのアプリケーション登録とアクセスキーを取得する必要があります。手順はデスクトップアプリケーションの場合はこちら、ASP.NETなどのwebアプリケーションの場合はこちらです。

ついっぷるフォトにAPIを使って画像をアップロードする手順の概要

以下の手順でついっぷるフォトに画像をアップロードします。基本はこちらのTwitpicの認証APIを使ったアップロード方法とほぼ同じになります。
  1. TwitterのOAuthのシグネチャーを取得します。(OAuthBase.csのGenerateSignature()を使います。) 生成したシグネチャーとTimeStamp,nonceの3つをX-Verify-Credentials-Authorizationの値として使います。
  2. ついっぷるフォトへ画像を投稿(ポスト)するためのHttpWebRequestを準備します。これをwebRequestとします
  3. webRequestのヘッダに"X-Auth-Service-Provider"を追加します。値は認証プロバイダのURLとします。今回は認証プロバイダはTwitterになりますので、"https://api.twitter.com/1/account/verify_credentials.json" となります。
  4. webRequestのヘッダに"X-Verify-Credentials-Authorization"を追加します。値は後述します。
  5. 本文(content)を作成します。
    1. バウンダリのヘッダを挿入します。ヘッダの形式は "--(バウンダリ文字列)" となります。バウンダリ文字列はユニークな文字列にするため、Guid.NewGuid()メソッドで作成します。
    2. 画像(media)の作成
      1. Content-Disposition: file; name="media"; filename="ファイル名" ヘッダを追加します。mediaはついっぷるフォトのAPIで指定されているパラメータ名です。
      2. Content-Type: image/jpeg のContent-Typeヘッダを追加します。アップロードする画像の形式に合わせます。
      3. 空行を挿入しヘッダを終了します
      4. エンコードした画像データを書き込みます。
    3. バウンダリのフッタを追加します。フッタの形式は "--(バウンダリ文字列)--" となります。
  6. 本文を"iso-8859-1"でエンコードします。
  7. webRequest.GetRequestStream();メソッドを使い、書き込み用のストリームを取得します。
  8. エンコードした本文を書き込みます。
  9. レスポンスを取得し正常に書き込めたかをチェックします。

X-Verify-Credentials-Authorization の値について

X-Verify-Credentials-Authorization の値は以下の通りです。
OAuth realm="(RealmURL)", oauth_consumer_key="(TwitterのConsumerKey)", oauth_signature_method="HMAC-SHA1", oauth_token="(TwitterのAcessToken)", oauth_timestamp="(シグネチャー生成時のタイムスタンプ)", oauth_nonce="(シグネチャー生成時のnonce)", oauth_version="1.0", oauth_signature="(シグネチャー)"
となります。
  • (RealmURL)は "http://api.twitter.com/" となります。
  • (TwitterのConsumerKey),(TwitterのAcessToken)はTwitterから取得したキーを設定します。
  • (シグネチャー生成時のタイムスタンプ),(シグネチャー生成時のnonce),(シグネチャー)はOAuthのシグネチャー生成時のものを使います。

コード

ライブラリのコードはこちら

呼び出し側プログラム部分(FormMain.cs)

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using iPentec.Twitter;


namespace TwitpicPost
{
  public partial class FormMain : Form
  {
    public string ConsumerKey = "AAAAAAAAAAAAAAAAAAAAAA";
    public string ConsumerSecret = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";

    public string AccessToken = "1111111111-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
    public string AccessTokenSecret = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";


    public FormMain()
    {
      InitializeComponent();
    }

    private void FormMain_Load(object sender, EventArgs e)
    {
    }

    private void button5_Click(object sender, EventArgs e)
    {
      string PictureContentType = "image/jpeg"; //または "image/png"

      string apppath = Path.GetDirectoryName(Application.ExecutablePath);
      FileStream fs = new FileStream(apppath + @"\img\pic.jpg", FileMode.Open);
      byte[] img = new byte[fs.Length];
      int r = fs.Read(img, 0, (int)fs.Length);
      fs.Close();

      TwitterUtils tu = new TwitterUtils();
      tu.PostPictureToTwipplePhotoV2(img, "pic.jpg", 
        ConsumerKey, ConsumerSecret, AccessToken, AccessTokenSecret, PictureContentType);
    }
  }
}
著者
iPentecのプログラマー、最近はAIの積極的な活用にも取り組み中。
とっても恥ずかしがり。
最終更新日: 2024-01-07
作成日: 2011-04-23
iPentec all rights reserverd.