{"id":16707875,"url":"https://github.com/syuilo/twitch2","last_synced_at":"2025-04-10T05:16:20.238Z","repository":{"id":31443545,"uuid":"35007244","full_name":"syuilo/Twitch2","owner":"syuilo","description":"Twitch2 is a .NET Twitter library","archived":false,"fork":false,"pushed_at":"2018-07-14T14:20:12.000Z","size":148,"stargazers_count":5,"open_issues_count":6,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-10T05:16:13.833Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/syuilo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-05-04T01:11:49.000Z","updated_at":"2018-03-25T05:44:27.000Z","dependencies_parsed_at":"2022-09-09T10:23:04.472Z","dependency_job_id":null,"html_url":"https://github.com/syuilo/Twitch2","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/syuilo%2FTwitch2","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/syuilo%2FTwitch2/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/syuilo%2FTwitch2/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/syuilo%2FTwitch2/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/syuilo","download_url":"https://codeload.github.com/syuilo/Twitch2/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248161283,"owners_count":21057556,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-12T19:41:20.274Z","updated_at":"2025-04-10T05:16:20.217Z","avatar_url":"https://github.com/syuilo.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"![](https://raw.githubusercontent.com/syuilo/Twitch2/master/twitch2.png)\n\nできるかぎりシンプルに、できるかぎり簡単に、できるかぎり美しくTwitterを扱えるようにしたTwitterライブラリです。\nTwitterAPI 1.1、ストリーミング、xAuth認証などにも対応。\n\n# ダウンロード\n**[ここ](http://syuilo.com/Twitch.zip)**\n\n(注: 上記のダウンロード先のものは古い可能性があります。最新のものを使いたい場合はこのリポジトリをクローンし手動でビルドしてください(2015年6月現在、まだリリースはありません))\n\n付属のXMLも一緒に設置することで、インテリセンスの恩恵を受けられます。\n![](http://syuilo.com/twitch/twitchintellisense.png)\n\n# 簡単なドキュメンテーション\n**C#**での解説となります。ご了承ください。\n## はじめに\nTwitchの使い方の例として、タイムラインにツイートを投稿するまでの一連の流れを見ていきます。\n\nまず\n```CSharp\nvar tw = new Twitter(\"your consumer key\", \"your consumer secret\");\ntw.Authorize();\n```\nとします(`your consumer key`にはあなたのアプリケーションの*ConsumerKey*を、`your consumer secret`にはあなたのアプリケーションの*ConsumerSecret*を設定してください)。\n\nすると規定のウェブブラウザで連携認証フォームが表示されます。ユーザーが連携を許可すると*PINコード*が得られます。\n次に、\n```CSharp\ntw = await tw.AuthorizePin(\"got pin code\");\n```\nとすることでTwitterAPIにアクセス出来るようになります(`got pin code`には取得できた*PINコード*を設定してください)。\nここまでたった3文です。\n実際になにかつぶやいてみましょう:\n```CSharp\ntw.Tweet(\"Hello, Twitch!\");\n```\nさあどうでしょうか。タイムラインを確認してみてください。\n**無事にツイートが投稿されていれば成功です。**\n\n### 上記のコードの解説\n`var tw = new Twitter(...)`で***Twitterクラス(Twitch.Twitter)*のインスタンス**を作成しています。\n\n便宜上、この**「Twitterクラスのインスタンス」のことをTwitchでは*Twitterオブジェクト*と呼んでいます。**\n\nTwitterオブジェクトの`Authorize`メソッドの呼び出しでブラウザに認証フォームを表示させます。\n\nTwitterオブジェクトの`AuthorizePin`メソッドは、PINコードを受け取って、認証されたユーザーのAccessToken、AccessTokenSecretなどが設定された新たなTwitterオブジェクトを返します(呼び出したTwitterオブジェクト自体が書き換わるわけではありません。**新たな**Twitterオブジェクトを返します)。\n\n## ストリーミング\nTwitterの**ストリーミングAPI**を利用すると、リアルタイムでタイムラインを取得したりすることが出来ます。TwitchではこれらのストリーミングAPIをサポートしています。\n\n試しに*UserStream*を利用してみます。\nStreaming APIの中でも、*UserStream*はユーザーのホーム タイムライン、各種イベントが送られます。\nつまり、通常のそのユーザーのホーム タイムラインに表示されるべきツイートに加えて、ツイートがお気に入りに登録された/解除された、フォローされた、リストが更新されたなどのイベントが発行されます。\nTwitchではこれらのイベントも簡単に利用できます。\n\nUserStreamに接続するには、*UserStream (Twitch.Streaming.UserStream)* クラスを利用します。\nUserStream クラスの *Connect()* メソッドにより接続を開始出来ます。\n\n具体的なコードを以下に示します。(`using Twitch.Streaming;`してください)\n```CSharp\nvar tw = (上記の認証手順などで取得できたTwitterオブジェクト)\n \n// UserStream作成\nvar stream = new UserStream(tw);\n \n// StatusUpdated イベントをイベント ハンドラーに登録\n// このイベントは、ホーム タイムラインにツイートが投稿された際に発生します。\nstream.StatusUpdated += \n    new UserStream.StatusUpdatedEventHandler(StreamingCallback);\n \n// 接続を開始\nstream.Connect();\n```\n上記のコードに加え、ツイートを受け取るイベントハンドラーを作成する必要があります。\n以下はその例です。\n```CSharp\npublic void StreamingCallback(object sender, StatusUpdatedEventArgs e)\n{\n    // ツイートを表示\n    Console.WriteLine(e.Status.Text);\n}\n```\n外部にイベントハンドラーを作成せずに、ラムダ式を使っても書けます。\n```CSharp\nstream.StatusUpdated += (object _, StatusUpdatedEventArgs e) =\u003e\n{\n    // ツイートを表示\n    Console.WriteLine(e.Status.Text);\n};\n```\nこのプログラムを実行すると、コンソールにリアルタイム\u0026非同期でユーザーのホーム タイムラインが表示されていきます。\nこのように、接続を開始すると、継続してTwitterからStream メッセージが送信されていきます。\nイベント メッセージを受信すると、それに対応したイベントが発行されます。これには通常のツイート イベントも含まれます。\n\nUserStreamのStreaming 接続は、様々な理由により予期せずに切断されることがあります。\nこのとき、あらかじめStreamの*IsAutoReconnect*プロパティを`true`にしておくと、自動的に再接続を試みます。\n\n---\n\nTwitchでこれらのストリーミングAPIを利用すれば、所謂**エタフォ**(タイムラインに流れてきたツイートを自動でふぁぼる)も簡単に実装することが出来ます。\n\n## カスタム リクエストの作成\n一般に公開されていないエンドポイントへのリクエストなど、Twitchが対応していないAPIへの独自のリクエストを送信したい場合は、*TwitterオブジェクトのRequestメソッド*を利用するか、または *TwitterRequest (Twitch.TwitterRequest) クラス* を利用して簡単にリクエストを作成できます。\n\n### TwitterオブジェクトのRequestメソッドを利用する例\n```\nvar query = new Dictionary\u003cstring, string\u003e();\nquery[\"hrtn\"] = \"hmwr\";\nquery[\"oomr\"] = \"skrk\";\n\ntw.Request(API.Method.POST, \"https://api.twitter.com/hoge/huga.json\", query);\n```\n\n# 初代Twitchからの変更点(初代Twitchを使っていた人向けのセクション)\n- *TwitterContext*は、*Twitter*に名称変更しました。\n- APIへのリクエストは、APIクラスのメンバメソッドにTwitterオブジェクトを渡す方式ではなく、Twitterオブジェクト自体がAPIリクエストメソッドを持つようになりました。これにより簡潔にAPIへリクエストを行うことが出来るようになりました。\n\nTwitch:\n```\nTwitch.Twitter.APIs.REST.Statuses.Update(tw, \"櫻子可愛いですわ\");\n```\nTwitch2:\n```\ntw.Tweet(\"櫻子可愛いですわ\");\n```\n\n- 認証もより簡潔になりました。Twitterオブジェクト自体が認証メソッドを持つようになり、Authorizeクラスのインスタンスを認証プロセスの間保持しておく必要がなくなりました。\n- 疑似xAuthは最早サポートされなくなりました。\n\n# License\nms-pl\n\n# Special thanks\n古谷向日葵、大室櫻子\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsyuilo%2Ftwitch2","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsyuilo%2Ftwitch2","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsyuilo%2Ftwitch2/lists"}