No.1205  よっしゃ。まず認証いけそう!! C# OAuth認証 はてなAPI

移動前ブクマページ: https://b.hatena.ne.jp/entry/s/elve.hateblo.jp/entry/2017/04/18/210709

実は自分のエントリやブクマがブクマされたことを検索するのが難しいのではないかと危惧しているのですが、とりあえずOAuth認証な。OAuthだかAOuthだかわからなくなるレベルのババァが書いてるから油断するなよw

Visual Studio Community 2017
ダウンロードとインストールくらいはできるぜ←インストール1回失敗したw

んで、新しいプロジェクト->Windowsフォームアプリ選択

ツール-> NuGet->何とかの管理->AsyncOAuthを検索してインストール

クラス追加してまるっとコピー
github.com

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Diagnostics;
using System.IO;
using System.Net.Http;
using AsyncOAuth;
namespace WindowsFormsApp1
{
// a sample of hatena client
public class HatenaClient
{
readonly string consumerKey;
readonly string consumerSecret;
readonly AccessToken accessToken;
public HatenaClient(string consumerKey, string consumerSecret, AccessToken accessToken)
{
this.consumerKey = consumerKey;
this.consumerSecret = consumerSecret;
this.accessToken = accessToken;
}
// sample flow for Hatena authroize
public async static Task<AccessToken> AuthorizeSample(string consumerKey, string consumerSecret)
{
// create authorizer
var authorizer = new OAuthAuthorizer(consumerKey, consumerSecret);
// get request token
var tokenResponse = await authorizer.GetRequestToken(
"https://www.hatena.com/oauth/initiate",
new[] { new KeyValuePair<string, string>("oauth_callback", "oob") },
new FormUrlEncodedContent(new[] { new KeyValuePair<string, string>("scope", "read_public,write_public") }));
var requestToken = tokenResponse.Token;
var pinRequestUrl = authorizer.BuildAuthorizeUrl("https://www.hatena.ne.jp/oauth/authorize", requestToken);
// open browser and get PIN Code
Process.Start(pinRequestUrl);
// enter pin
Console.WriteLine("ENTER PIN");
var pinCode = Console.ReadLine();
// get access token
var accessTokenResponse = await authorizer.GetAccessToken("https://www.hatena.com/oauth/token", requestToken, pinCode);
// save access token.
var accessToken = accessTokenResponse.Token;
Console.WriteLine("Key:" + accessToken.Key);
Console.WriteLine("Secret:" + accessToken.Secret);
return accessToken;
}
HttpClient CreateOAuthClient()
{
return OAuthUtility.CreateOAuthClient(consumerKey, consumerSecret, accessToken);
}
public async Task<string> GetMy()
{
var client = CreateOAuthClient();
var json = await client.GetStringAsync("http://n.hatena.com/applications/my.json");
return json;
}
public async Task<string> AppicationStart()
{
var client = CreateOAuthClient();
var response = await client.PostAsync("http://n.hatena.com/applications/start", new StringContent("", Encoding.UTF8));
return await response.Content.ReadAsStringAsync();
}
}
}

フォームにボタンを適当においてダブルクリック
基本こぴぺ
blog.daruyanagi.jp

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Diagnostics;
using System.IO;
using System.Net.Http;
using AsyncOAuth;
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private async void button1_Click(object sender, EventArgs e)
{
//登録
//OAuth Consumer Keyプライベート 教えられない1
//OAuth Consumer Secretプライベート 教えられない2
//OAuth認証URL
//Temporary Credential Request URL    https://www.hatena.com/oauth/initiate
//Resource Owner Authorization URL(PC)   https://www.hatena.ne.jp/oauth/authorize
//Token Request URL https://www.hatena.com/oauth/token
var authorizer = new OAuthAuthorizer("教えられない1", "教えられない2");
var callbackUri = "oob";
var requestTokenResponse = await authorizer.GetRequestToken(
"https://www.hatena.com/oauth/initiate",
new[]
{
new KeyValuePair<string, string>(
"oauth_callback",
callbackUri
)
},
new FormUrlEncodedContent(new[] {
new KeyValuePair<string, string>(
"scope",
"read_public,write_public"
)
})
);
var requestToken = requestTokenResponse.Token;
var authorizeUrl = authorizer.BuildAuthorizeUrl(
"https://www.hatena.ne.jp/touch/oauth/authorize",
requestToken);
//標準のブラウザで開いて表示する
System.Diagnostics.Process.Start(authorizeUrl);
}
}
}

これで実行するとハッシュタグ初期化? してねぇ!! って例外を投げられる
main関数に初期化コードコピペ

using System;
using System.Security.Cryptography;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
using AsyncOAuth;
namespace WindowsFormsApp1
{
static class Program
{
/// <summary>
/// アプリケーションのメイン エントリ ポイントです。
/// </summary>
[STAThread]
static void Main()
{
OAuthUtility.ComputeHash = (key, buffer) => { using (var hmac = new HMACSHA1(key)) { return hmac.ComputeHash(buffer); } };
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
}

ボタンぽち、で
f:id:elve:20170418210632p:plain
やったねー!!

どのくらい面白かった?

星を押して送信してね

平均 0 / 5. Vote count: 0

是非フォローしてください

最新の情報をお伝えします

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です