質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.49%

  • C#

    7378questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • API

    1554questions

    APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

  • Bitcoin

    60questions

    Bitcoinは、インターネット上で流通している電子マネーです。P2Pネットワークを通じた安価な決済コストが実現できる一方、取引時の危険性や闇市場・資金洗浄など不正取引の温床といった法的問題も抱えています。

【C#に詳しい方募集】C#でのbitflyerのAPIの使い方が分かりません。

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 737

kurakura00

score 2

前提・実現したいこと

【C#に詳しい方募集】C#でのbitflyerのAPIの使い方が分かりません。

プログラミング初心者なのですが、

https://teratail.com/questions/74228
https://kokenji.net/bitflyer-api/
などを参考にして自分のレベルでやれるだけいじってみましたが、どうしても上手に動かせません。一体どこが間違っているのでしょうか?

お手数ですが、ご教授いただけると幸いです。

上手くいかない点

internal static async Task<string> Send(HttpClient http, Uri path, string apiKey, string secret, string method, Dictionary<string, string> query = null, object body = null)
の部分の「Send」のエラーだけが消えません。2番めのURLを参考に色々いじってみたのですが、どうしてもエラーが消えてくれないので困っています。
改善点を教えていただけると助かります。。。

using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
using System.Linq;
using Newtonsoft.Json;

/// <summary>bitFlyer取引所のAPIを実行します。
/// </summary>
/// <param name="http">取引所と通信する HttpClient。</param>
/// <param name="path">APIの通信URL(取引所サイトからの相対)。</param>
/// <param name="apiKey">APIキー。</param>
/// <param name="secret">秘密キー。</param>
/// <param name="method">APIメソッド。"GET"か"POST"を指定します。</param>
/// <param name="query">URLクエリ。</param>
/// <param name="body">APIメソッドが"POST"のとき指定するリクエストボディ。</param>
/// <returns>レスポンスとして返されるJSON形式の文字列。</returns>
internal static async Task<string> Send(HttpClient http, Uri path, string apiKey, string secret, string method, Dictionary<string, string> query = null, object body = null)
{
    // 相対URLにクエリパラメータを追加
    if (query != null && query.Any())
    {
        var content = new FormUrlEncodedContent(query);
        string q = await content.ReadAsStringAsync();

        path = new Uri(path.ToString() + "?" + q, UriKind.Relative);
    }

    // リクエスト時のUNIXタイムスタンプ
    string timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString();

    //リクエストボディをJSON化
    string jsonBody = body == null ? "" : JsonConvert.SerializeObject(body);

    // POSTするメッセージを作成
    string message = timestamp + method + path.ToString() + jsonBody;

    // メッセージをHMACSHA256で署名
    byte[] hash = new HMACSHA256(Encoding.UTF8.GetBytes(secret)).ComputeHash(Encoding.UTF8.GetBytes(message));
    string sign = BitConverter.ToString(hash).ToLower().Replace("-", "");//バイト配列をを16進文字列へ

    // HTTPヘッダをセット
    http.DefaultRequestHeaders.Clear();
    http.DefaultRequestHeaders.Add("ACCESS-KEY", apiKey);
    http.DefaultRequestHeaders.Add("ACCESS-TIMESTAMP", timestamp);
    http.DefaultRequestHeaders.Add("ACCESS-SIGN", sign);

    // 送信
    HttpResponseMessage res;
    if (method == "POST")
    {
        var content = new StringContent(jsonBody, Encoding.UTF8, "application/json");
        res = await http.PostAsync(path, content);
    }
    else if (method == "GET")
    {
        res = await http.GetAsync(path);
    }
    else
    {
        throw new ArgumentException("method は POST か GET を指定してください。", method);
    }

    //返答内容を取得
    string text = await res.Content.ReadAsStringAsync();

    //通信上の失敗
    if (!res.IsSuccessStatusCode)
        return "";

    return text;
}
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • Zuishin

    2017/09/26 21:37

    どうつなげるかというのはどういう意味ですか?最初のソースで Send メソッドを定義しており、二番目のソースで使っています。そのままです。まず C# で最低限のアプリは作れますか? 作れないのなら話にならない(教えることが多すぎる)ので作れるようになってから相談してください。

    キャンセル

  • Tak1wa

    2017/09/27 07:45

    提示された二つのコードは参考URLから転記されているわけではないのですか?現状どういう実装をしてどううまくいかないのかが抜けています。

    キャンセル

  • kurakura00

    2017/09/27 12:01

    お二人方ご指摘ありがとうございます。プログラミング系の質問するのが初めてなので、多くの至らない点があったみたいで、申し訳ないです。すみません。C#はUnityでブロック崩しをつくるぐらいしかやったことがないレベルなので、他にも至らない点がありましたらご指摘いただければ幸いです。ご迷惑をおかけしました。

    キャンセル

回答 2

checkベストアンサー

+1

C#では裸の関数というものが書けません。必ず、クラス内に作られたメソッドという形で書かないといけないことになっています。
エラーというのは「クラス宣言の中でないのにメソッド宣言が現れた」ということになります。

ですから、そのSend関数というかメソッド全体をダミーでいいのでクラスの中に入れます。BitflyerClientクラスとでも名付けましょうか。
インスタンス化する必要なのない、staticメソッドだけ収めるクラスであればstatic class BitflyerClient {と書けます。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

Send はメソッドなのでクラスの中に実装しなければなりません。Send を実装するクラスを作って下さい。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.49%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • C#

    7378questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • API

    1554questions

    APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

  • Bitcoin

    60questions

    Bitcoinは、インターネット上で流通している電子マネーです。P2Pネットワークを通じた安価な決済コストが実現できる一方、取引時の危険性や闇市場・資金洗浄など不正取引の温床といった法的問題も抱えています。