C++でTwitterのクライアントを製作する方法を学びたいと思っています。
世のクライアントたちは、一体どうやってインターネットを通じTwitterサーバー上の他人のツイート情報を取得したり、自分のツイート情報やFavorite情報などを送信しているのでしょうか?
Twitterを利用する上でもっとも基本的な機能(ツイート情報の送信、受信、Favorite情報の送信、フォローフォロワ情報の取得)などはC++で記述・実装できますか?
もしもそのコードをご存知の方がいらっしゃいましたらご教授願いたく思います、そして参考になるサイト等ご存知の方がいらっしゃいましたらそちらもご教授いただければと思います。
ちなみにこちらhttp://usy.jp/twitter/index.php?Twitter%20APIのサイトは閲覧いたしました。
C++でTwitterクライアント
Re: C++でTwitterクライアント
僕もTwitterクライアントをC++で実装しようと思ったことがありました.実際はまだ実装できてませんが.
一つはこちらからtwitterサーバーに時々情報を要求するやり方.30秒とか1分に1回,twitterのサーバーへ情報を要求しますと,サーバーからXMLまたはJSONの形で情報が送られてきます.
dxwxさんが示されたURLで解説されているのは,こちらの手法だと思います.
もう一つは,常時twitterサーバーと接続しておくやり方.User Streamsと呼ばれるものです.これは,新着ツイートがあれば,サーバーが自動的に情報を送ってくれますので,こちらから能動的に情報を要求する必要がありません.
まあ,どちらを使うにしろ,基本的にはソケット通信を用いて情報をやり取りしますから,まずはC/C++でのソケット通信のやり方を学んで下さい.(もしかしたらtwitterライブラリがある可能性もありますが,僕は探していませんので分かりません)
はい,もちろん可能です.C++はOSでさえ作れる言語ですからね.dxwx さんが書きました:Twitterを利用する上でもっとも基本的な機能(ツイート情報の送信、受信、Favorite情報の送信、フォローフォロワ情報の取得)などはC++で記述・実装できますか?
大きく2種類のやり方があります.dxwx さんが書きました:世のクライアントたちは、一体どうやってインターネットを通じTwitterサーバー上の他人のツイート情報を取得したり、自分のツイート情報やFavorite情報などを送信しているのでしょうか?
一つはこちらからtwitterサーバーに時々情報を要求するやり方.30秒とか1分に1回,twitterのサーバーへ情報を要求しますと,サーバーからXMLまたはJSONの形で情報が送られてきます.
dxwxさんが示されたURLで解説されているのは,こちらの手法だと思います.
もう一つは,常時twitterサーバーと接続しておくやり方.User Streamsと呼ばれるものです.これは,新着ツイートがあれば,サーバーが自動的に情報を送ってくれますので,こちらから能動的に情報を要求する必要がありません.
まあ,どちらを使うにしろ,基本的にはソケット通信を用いて情報をやり取りしますから,まずはC/C++でのソケット通信のやり方を学んで下さい.(もしかしたらtwitterライブラリがある可能性もありますが,僕は探していませんので分かりません)
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: C++でTwitterクライアント
最新のTwitterAPIは暗号認証とか色々高度な問題となるので初心者には余りお勧めできません。
昔のサンプルとかは暗号化していないので役立ちませんし調べる情報が膨大に多いです。
「ぐうたら感謝の日 ブログ編: 最近ホットなツイッターを昔ながらのクールなC言語でなんとか扱ってみた。」
http://guutara-6138.blogspot.com/2011/12/c.html
ここの情報にある「そらみみの声」のサイトも私のPCからアクセス不能でソースが入手不能ですが、そちらでアクセスできますでしょうか?
とにかく独自構築にはWinSock2での通信やらOpenSSLなどの暗号通信、xAuth認証などを理解する必要があります。
私もやったことが無いので、どんな問題があるかはお応えできませんのでご了承ください。
昔のサンプルとかは暗号化していないので役立ちませんし調べる情報が膨大に多いです。
「ぐうたら感謝の日 ブログ編: 最近ホットなツイッターを昔ながらのクールなC言語でなんとか扱ってみた。」
http://guutara-6138.blogspot.com/2011/12/c.html
ここの情報にある「そらみみの声」のサイトも私のPCからアクセス不能でソースが入手不能ですが、そちらでアクセスできますでしょうか?
とにかく独自構築にはWinSock2での通信やらOpenSSLなどの暗号通信、xAuth認証などを理解する必要があります。
私もやったことが無いので、どんな問題があるかはお応えできませんのでご了承ください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: C++でTwitterクライアント
お二方ともありがとうございます!返信が遅くなり申し訳ありません…
http://code.google.com/p/twit-library/
ところでこのようなサイトを発見したのですが、これってもしかしてものすごーく役に立ちますか…?
一応ダウンロードしてみたのですが、DXライブラリのようにリファレンスがまとめられているものが見つからず、
どのような関数があるのかわかりません。
見落としだと思うのですが、どこにそういったものがあるのか教えて頂けませんでしょうか。
やっぱり.hppファイルを一つずつ見ていくしかないのですか?
ちなみに、今C++2010を持っていないので.slnファイルが開けません… 明日導入し、確認します!
>>beatleさん
ソケット通信ですか…わかりました。学校に行ったら先生に聞きながら学んでみようと思います。
インストールして使うクライアントは前者の形式(時々情報を要求するやり方)が多いですよね。
UserStreamsというのは、多分私の考えているものとは違うと思うので、↑こちらのやり方を突き詰めていきたいです。
>>ソフト屋さん
OAuth認証に関しては色々とサイトを見つけたので何とかなると思うのですが…
基本的な機能についてが検討もつかなくて。
教えて頂いたサイト拝見しました。このような詳細なコードを提示して頂きとても助かりました!ありがとうございます!
まずはこれらのコードを理解したいです!
http://code.google.com/p/twit-library/
ところでこのようなサイトを発見したのですが、これってもしかしてものすごーく役に立ちますか…?
一応ダウンロードしてみたのですが、DXライブラリのようにリファレンスがまとめられているものが見つからず、
どのような関数があるのかわかりません。
見落としだと思うのですが、どこにそういったものがあるのか教えて頂けませんでしょうか。
やっぱり.hppファイルを一つずつ見ていくしかないのですか?
ちなみに、今C++2010を持っていないので.slnファイルが開けません… 明日導入し、確認します!
>>beatleさん
ソケット通信ですか…わかりました。学校に行ったら先生に聞きながら学んでみようと思います。
インストールして使うクライアントは前者の形式(時々情報を要求するやり方)が多いですよね。
UserStreamsというのは、多分私の考えているものとは違うと思うので、↑こちらのやり方を突き詰めていきたいです。
>>ソフト屋さん
OAuth認証に関しては色々とサイトを見つけたので何とかなると思うのですが…
基本的な機能についてが検討もつかなくて。
教えて頂いたサイト拝見しました。このような詳細なコードを提示して頂きとても助かりました!ありがとうございます!
まずはこれらのコードを理解したいです!
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: C++でTwitterクライアント
私のところからは「そらみみの声」は未だにアクセス不能なんですがアクセスできましたか?
勉強のポイントとしては、
・TCP/IPの仕組み [追記] 「TCP/IP入門」 http://net-newbie.com/tcpip/ 「TCP/IP入門 - @IT」 http://www.atmarkit.co.jp/channel/tcpip/tcpip.html
・TCP/IPレベルでのHTTPの仕組み [追記]HTTPの仕組み 「Studying HTTP」 http://www.studyinghttp.net/
・ソケット通信の仕組み [追記] 「Geekなぺーじ:winsockプログラミング」 http://www.geekpage.jp/programming/winsock/
・WEB・APIの仕組み [追記] 「Web APIという巨人の力を使っちゃえ! - @IT」 http://www.atmarkit.co.jp/fnetwork/rens ... pi/01.html
「Google/Amazon/Yahoo! Webサービス徹底活用 - Google/Amazon/Yahoo! Webサービス徹底活用:ITpro」 http://itpro.nikkeibp.co.jp/article/COL ... 28/249300/
・暗号の仕組み
・SSLの使い方
・暗号認証の仕組み
などを理解しないとtwiiterの通信は難しいと思います。
元のプロジェクトを使う必要がなければ2005や2008でもソースだけ持ってきてプロジェクトを構築すればコンパイルできると思いますよ。
ただし、Boost C++ Libraries とOpenSSL は別途用意する必要があります。これは、2010を導入しても同じです。
勉強のポイントとしては、
・TCP/IPの仕組み [追記] 「TCP/IP入門」 http://net-newbie.com/tcpip/ 「TCP/IP入門 - @IT」 http://www.atmarkit.co.jp/channel/tcpip/tcpip.html
・TCP/IPレベルでのHTTPの仕組み [追記]HTTPの仕組み 「Studying HTTP」 http://www.studyinghttp.net/
・ソケット通信の仕組み [追記] 「Geekなぺーじ:winsockプログラミング」 http://www.geekpage.jp/programming/winsock/
・WEB・APIの仕組み [追記] 「Web APIという巨人の力を使っちゃえ! - @IT」 http://www.atmarkit.co.jp/fnetwork/rens ... pi/01.html
「Google/Amazon/Yahoo! Webサービス徹底活用 - Google/Amazon/Yahoo! Webサービス徹底活用:ITpro」 http://itpro.nikkeibp.co.jp/article/COL ... 28/249300/
・暗号の仕組み
・SSLの使い方
・暗号認証の仕組み
などを理解しないとtwiiterの通信は難しいと思います。
使うだけならtwit-libraryにあるサンプルを真似すればすぐに使えると思いますが、今はリファレンスはないのでサンプルを見て真似しろってことだと思います。もし、自分で理解して全てを作る気なら解析する必要があるでしょう。dxwx さんが書きました:http://code.google.com/p/twit-library/
ところでこのようなサイトを発見したのですが、これってもしかしてものすごーく役に立ちますか…?
元のプロジェクトを使う必要がなければ2005や2008でもソースだけ持ってきてプロジェクトを構築すればコンパイルできると思いますよ。
ただし、Boost C++ Libraries とOpenSSL は別途用意する必要があります。これは、2010を導入しても同じです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: C++でTwitterクライアント
従来のAPIとほぼ同じ事はできると思いますが.dxwx さんが書きました:UserStreamsというのは、多分私の考えているものとは違うと思うので、
User Streamsを使っているクライアントとして,TweetDeckというものがあります.
僕も使っていますが,普通のクライアントと同じ事が,もっと快適にできます.
User Streamsを体験する意味でも,1度使ってみてはいかがでしょうか.
Re: C++でTwitterクライアント
そうでもないです。beatle さんが書きました:従来のAPIとほぼ同じ事はできると思いますが.dxwx さんが書きました:UserStreamsというのは、多分私の考えているものとは違うと思うので、
まず,beatleさんが書かれている「従来のAPI」,TwitterのドキュメントではREST APIと書かれていますが,これはクライアント側がサーバーに問い合わせる「pull型」のAPIです。
いわゆる「API制限」がGET系APIの一部にあります。
それに対して,「User Streams」というのは,一度接続するとTwitterから延々とイベント情報が流れてくる「push型」のAPIです。
push型なので,逆に言うと一部の「取ってくる」処理しか出来ません。
# そのかわりにREST APIではやりにくいことができたりもする。
tweetするには,REST API使ってPOST statuses/updateする必要がありますし,User Streamsへの接続ができない場合や過去の情報は,REST APIで取得する必要があります。
# 過去には,REST APIの上限が減っていって繋がりにくい中,USは正常動作,ということもあったのですが (2010年のFIFAワールドカップの時です)
User Streamasというのはどうしても癖のあるAPIなので,まずはREST APIで書くことをお薦めします。
Re: C++でTwitterクライアント
皆様たくさんのご返信ありがとうございます!
とても難しくて初心者には無理だということは重々承知の上なのですが、知識として知っておきたくて…
実際に完成させられるとはもちろん思っていませんが、学ぶだけ学びたいと思っています。
>>ソフト屋さん
書き漏れが多くて申し訳ありません、そらみみの声、アクセスできますよ!
http://www.soramimi.jp/twicpp/twicpp.zip
こちらのファイルが置いてありました。
アプリケーションを登録して、
というtxtファイルを作成しインクルードしたら実行し、画面の通りにキーを入力すると、
「input message: 」の後に文字列を入力することで投稿ができるみたいです。
たくさんの参考サイトを提示して頂きありがとうございます。
リファレンスに関しては現在は実装されていないのですね…。それでは、用意されているファイルを見ながら自分でリファレンスのようなものを作ってみたいと思います。
説明が大変不足して申し訳ないのですが、自分の目指しているものは基本的なTwitterクライアントの機能にグラフィック面などゲーム的な要素を付与することでありまして、もしも先人が素晴らしいコード等を作成してくれているのなら、それをそのまま流用させて頂きたいと考えています。
何分通信等の専門的な部分は手つかずでして…自分に出来る気がしないので。
ですがいずれは自分の力でクライアント自体の構造を作ることも必要だと痛感しておりますので、提示して頂いたサイトでしっかり勉強しようと思います。
>>beatleさん
はい、おそらくその形式だとAPI制限等に囚われずにツイート取得等ができるのでしょうね。
機能的な制限等は無いのでしょうが、自分の考えているクライアントはツイートの投稿等にゲーム的要素を付与するものでして、おそらくUserStreamsだと即時処理等が難しくなるし重さも逐次取得と比べると増してしまうかな、と思ったんです。
UserStreamsだと自分は「ツイタマ」というソフトを使ったことがあるのですが、個人的に肌に合わなかった、というのも理由の一つです。
TweetDeckは使ったことがありませんが、周囲に使っている人がたくさんいるので、よいソフトなのでしょうね。懐古厨の自分がうらめしい所です…
>>YuOさん
えっ…そうなんですか。やっぱりアナログ的なものにもデジタル以上の利点が存在したりするのですね。
API制限についてはREST API系のソフトを愛用している自分にとってはとても身近なものなので、処理はできると思います。
ユーザーに取得の頻度を決めてもらえばいいですよね。
UserStreamsの方が安定しているというのも恩師から聞きました。でも最低限movatwiでできること(Favoriteとか)はできるようにしたいので、まずは慣れ親しんだREST APIを利用したいと思います。ご意見ありがとうございました。
とても難しくて初心者には無理だということは重々承知の上なのですが、知識として知っておきたくて…
実際に完成させられるとはもちろん思っていませんが、学ぶだけ学びたいと思っています。
>>ソフト屋さん
書き漏れが多くて申し訳ありません、そらみみの声、アクセスできますよ!
http://www.soramimi.jp/twicpp/twicpp.zip
こちらのファイルが置いてありました。
アプリケーションを登録して、
static char const consumer_key[] = "xxxxxxxxxxxxxxxxxxxxxx";
static char const consumer_secret[] = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
「input message: 」の後に文字列を入力することで投稿ができるみたいです。
たくさんの参考サイトを提示して頂きありがとうございます。
リファレンスに関しては現在は実装されていないのですね…。それでは、用意されているファイルを見ながら自分でリファレンスのようなものを作ってみたいと思います。
説明が大変不足して申し訳ないのですが、自分の目指しているものは基本的なTwitterクライアントの機能にグラフィック面などゲーム的な要素を付与することでありまして、もしも先人が素晴らしいコード等を作成してくれているのなら、それをそのまま流用させて頂きたいと考えています。
何分通信等の専門的な部分は手つかずでして…自分に出来る気がしないので。
ですがいずれは自分の力でクライアント自体の構造を作ることも必要だと痛感しておりますので、提示して頂いたサイトでしっかり勉強しようと思います。
>>beatleさん
はい、おそらくその形式だとAPI制限等に囚われずにツイート取得等ができるのでしょうね。
機能的な制限等は無いのでしょうが、自分の考えているクライアントはツイートの投稿等にゲーム的要素を付与するものでして、おそらくUserStreamsだと即時処理等が難しくなるし重さも逐次取得と比べると増してしまうかな、と思ったんです。
UserStreamsだと自分は「ツイタマ」というソフトを使ったことがあるのですが、個人的に肌に合わなかった、というのも理由の一つです。
TweetDeckは使ったことがありませんが、周囲に使っている人がたくさんいるので、よいソフトなのでしょうね。懐古厨の自分がうらめしい所です…
>>YuOさん
えっ…そうなんですか。やっぱりアナログ的なものにもデジタル以上の利点が存在したりするのですね。
API制限についてはREST API系のソフトを愛用している自分にとってはとても身近なものなので、処理はできると思います。
ユーザーに取得の頻度を決めてもらえばいいですよね。
UserStreamsの方が安定しているというのも恩師から聞きました。でも最低限movatwiでできること(Favoriteとか)はできるようにしたいので、まずは慣れ親しんだREST APIを利用したいと思います。ご意見ありがとうございました。
Re: C++でTwitterクライアント
ソフト屋さんの教えてくれたサイトのお陰で自分の重大な勘違いに気付くことができました…。
APIというのは、インターネット上のサーバーとの通信体系か何かのことだと思っていたのですが、
プログラミングでいう所の関数のようなものなのですね?
「API」というプログラムの塊があり、それを実行することで一揃いの処理を実行できるというものなのですね?
大きな勘違いをしていました… これでもまだ間違っているようならお教えください。お願いします。
APIというのは、インターネット上のサーバーとの通信体系か何かのことだと思っていたのですが、
プログラミングでいう所の関数のようなものなのですね?
「API」というプログラムの塊があり、それを実行することで一揃いの処理を実行できるというものなのですね?
大きな勘違いをしていました… これでもまだ間違っているようならお教えください。お願いします。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: C++でTwitterクライアント
俗に言うWEBAPIは、SOAP/RESTインターフェイスなどでサービス・リクエストを送り、WEB上のサービスで何かしてもらったり情報をもらったりする仕組みです。なのでWEB上の関数という理解で大体あっていると思います。
もともと何らかのWEBサービスがあり、それを外部のアプリが利用する仕組みといって良いでしょう。Twitterもそうですが、GoogleMapとかYahoo検索とかですね。
もともと何らかのWEBサービスがあり、それを外部のアプリが利用する仕組みといって良いでしょう。Twitterもそうですが、GoogleMapとかYahoo検索とかですね。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: C++でTwitterクライアント
なるほど…先ほどのリンク、駆け出しの自分にもとてもわかりやすかったです。
今のところは概念の理解だけですが…ありがとうございます!
今はさっきのTwit-Libの導入をしているのですがboost/...がどうしてもうまく機能しなくて手動で../boost/...に書き換えています…
どこに辿り着けば解決なのかはわからないのですが、一応解決マークをつけておきます。
回答して下さった皆様ありがとうございました。もしまた何かあったらよろしくお願いします。
今のところは概念の理解だけですが…ありがとうございます!
今はさっきのTwit-Libの導入をしているのですがboost/...がどうしてもうまく機能しなくて手動で../boost/...に書き換えています…
どこに辿り着けば解決なのかはわからないのですが、一応解決マークをつけておきます。
回答して下さった皆様ありがとうございました。もしまた何かあったらよろしくお願いします。