Twicppsを利用したTwitterのデータの取得

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
あかり

Twicppsを利用したTwitterのデータの取得

#1

投稿記事 by あかり » 5年前

明けましておめでとうございます。
いつもお世話になっています。

今回お聞きしたいのは
http://www.soramimi.jp/twicpps/index.html
Twicppsを利用した利用したTwitterのデータの取得をしたいのですが、取得するためのサンプルコードがなく、どうすればいいのかわかりません。
どうすればいいのか教えていただけませんか?
よろしくお願いします。

使用環境
OS Windows8.1
開発環境 VC++

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 9年前
住所: 東海地方
連絡を取る:

Re: Twicppsを利用したTwitterのデータの取得

#2

投稿記事 by softya(ソフト屋) » 5年前

ヘッダを見る限り、そういう機能は実装されていない「つぶやく」オンリーのようです。
あとは自分でよろしく!的なライブラリだと思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

あかり

Re: Twicppsを利用したTwitterのデータの取得

#3

投稿記事 by あかり » 5年前

softya(ソフト屋) さんが書きました:ヘッダを見る限り、そういう機能は実装されていない「つぶやく」オンリーのようです。
あとは自分でよろしく!的なライブラリだと思います。
回答ありがとうございます。
そうだったんですか、通りでサンプルコードが見つからないわけですね。
件名のTwicppsを利用したを言う内容とは違いますが、Twitterのデータの取得には私が過去に質問した
http://dixq.net/forum/viewtopic.php?f=3&t=14671
のようにhttpsでHTMLのソースを取り出すことで、Twitterのデータを取得すればいいのでしょうか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 9年前
住所: 東海地方
連絡を取る:

Re: Twicppsを利用したTwitterのデータの取得

#4

投稿記事 by softya(ソフト屋) » 5年前

Twicppsを改良してTwitterの検索機能APIを利用するか、以前の話のhttpsでクロールするしか無いと思いますが負荷などはやること次第でAPIよりも増えそうです。それとTwitterのhtmlが更新するたびに対応する必要が出てきます。複数バージョンのhttpsが返る可能性もあります。
ちなみにTwicppsにはjsonの実装がないので、そこから考えないといけなさそうです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
みけCAT
記事: 6247
登録日時: 9年前
住所: 千葉県
連絡を取る:

Re: Twicppsを利用したTwitterのデータの取得

#5

投稿記事 by みけCAT » 5年前

あかり さんが書きました:件名のTwicppsを利用したを言う内容とは違いますが、Twitterのデータの取得には私が過去に質問した
http://dixq.net/forum/viewtopic.php?f=3&t=14671
のようにhttpsでHTMLのソースを取り出すことで、Twitterのデータを取得すればいいのでしょうか?
ダメです。Twitterでのスクレイピング利用規約違反になります。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 9年前
住所: 東海地方
連絡を取る:

Re: Twicppsを利用したTwitterのデータの取得

#6

投稿記事 by softya(ソフト屋) » 5年前

みけCAT さんが書きました:
あかり さんが書きました:件名のTwicppsを利用したを言う内容とは違いますが、Twitterのデータの取得には私が過去に質問した
http://dixq.net/forum/viewtopic.php?f=3&t=14671
のようにhttpsでHTMLのソースを取り出すことで、Twitterのデータを取得すればいいのでしょうか?
ダメです。Twitterでのスクレイピング利用規約違反になります。
それだとアカウント抹消か凍結されるでしょうね。と言うことでhttpsは無かったことにして下さい。

【補足】
ん? そう言えば、ログインしていない=アカウントのない非ユーザーだとどうなるのだろう。
検索もできるし、利用規約にも抵触しない? IPで弾かれそうだとは思うけど。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

あかり

Re: Twicppsを利用したTwitterのデータの取得

#7

投稿記事 by あかり » 5年前

softya(ソフト屋) さんが書きました:
みけCAT さんが書きました:
あかり さんが書きました:件名のTwicppsを利用したを言う内容とは違いますが、Twitterのデータの取得には私が過去に質問した
http://dixq.net/forum/viewtopic.php?f=3&t=14671
のようにhttpsでHTMLのソースを取り出すことで、Twitterのデータを取得すればいいのでしょうか?
ダメです。Twitterでのスクレイピング利用規約違反になります。
それだとアカウント抹消か凍結されるでしょうね。と言うことでhttpsは無かったことにして下さい。
そうだったんですか、わかりました。
Twitterの検索機能APIを調べてみたのですがTwitter Streaming APIのことなんでしょうか?
いろいろ調べて見ましたが、C++で実装されている方もいるみたいですが、Linux環境での実装なのでWindowsでの実装が出来るかわからないわからないライブラリも多く、まったくわかっていない状態です・・・

アバター
みけCAT
記事: 6247
登録日時: 9年前
住所: 千葉県
連絡を取る:

Re: Twicppsを利用したTwitterのデータの取得

#8

投稿記事 by みけCAT » 5年前

softya(ソフト屋) さんが書きました:と言うことでhttpsは無かったことにして下さい。
現行のTwitter APIはhttpsでアクセスしないといけなかったはずなので、httpsは無かったことにできませんね。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
みけCAT
記事: 6247
登録日時: 9年前
住所: 千葉県
連絡を取る:

Re: Twicppsを利用したTwitterのデータの取得

#9

投稿記事 by みけCAT » 5年前

あかり さんが書きました:Twitterの検索機能APIを調べてみたのですがTwitter Streaming APIのことなんでしょうか?
いろいろ調べて見ましたが、C++で実装されている方もいるみたいですが、Linux環境での実装なのでWindowsでの実装が出来るかわからないわからないライブラリも多く、まったくわかっていない状態です・・・
具体的に何を取得したいのかにもよりますが、とりあえずTwitter APIのりファレンスを貼っておきます。
REST APIs | Twitter Developers
The Streaming APIs | Twitter Developers
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 9年前
住所: 東海地方
連絡を取る:

Re: Twicppsを利用したTwitterのデータの取得

#10

投稿記事 by softya(ソフト屋) » 5年前

http://dx.24-7.co.jp/twitterapi1-1-rest-api/#search

検索するだけならsearchで、常に最新を取得し続けるならStreamingですかね。Streamingは使ったことが無いです。
みけCAT さんが書きました:
softya(ソフト屋) さんが書きました:と言うことでhttpsは無かったことにして下さい。
現行のTwitter APIはhttpsでアクセスしないといけなかったはずなので、httpsは無かったことにできませんね。
えーとごめんなさい。あかり さんには通じてますが、httpsで生htmlでアクセスしない(スクレイピング禁止)と言う話です。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

あかり

Re: Twicppsを利用したTwitterのデータの取得

#11

投稿記事 by あかり » 5年前

みけCAT さんが書きました:
あかり さんが書きました:Twitterの検索機能APIを調べてみたのですがTwitter Streaming APIのことなんでしょうか?
いろいろ調べて見ましたが、C++で実装されている方もいるみたいですが、Linux環境での実装なのでWindowsでの実装が出来るかわからないわからないライブラリも多く、まったくわかっていない状態です・・・
具体的に何を取得したいのかにもよりますが、とりあえずTwitter APIのりファレンスを貼っておきます。
REST APIs | Twitter Developers
The Streaming APIs | Twitter Developers
私がしたいのは不特定?多数のツイートを取得して解析(形態素解析などを行うため)を行うことを目的としていて、そのためにTwitterの生ツイートを取得したいと考えているので、Public streamsのほうになると思います

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 9年前
住所: 東海地方
連絡を取る:

Re: Twicppsを利用したTwitterのデータの取得

#12

投稿記事 by softya(ソフト屋) » 5年前

こういう仕様らしいので、どれだけ恐ろしい量のデータが流れてくるかは試してみないとわかりません。
http://lealog.hateblo.jp/entry/2013/03/10/100845
こっちにはリミット無いと書いてますが有るっぽいです(未確認)。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

あかり

Re: Twicppsを利用したTwitterのデータの取得

#13

投稿記事 by あかり » 5年前

softya(ソフト屋) さんが書きました:こういう仕様らしいので、どれだけ恐ろしい量のデータが流れてくるかは試してみないとわかりません。
http://lealog.hateblo.jp/entry/2013/03/10/100845
こっちにはリミット無いと書いてますが有るっぽいです(未確認)。
どれだけのデータが来るかは試してみないとわかりませんね。
いろいろ調べてみてはいるのですが、難しいです・・・
http://www.mk-mode.com/octopress/2014/1 ... aming-api/
のコードで実装しようとはしているのですが、Linuxが前提なのでうまくwindowsで実装できるか試してます。
ですが今はリンクエラーが発生しててなかなかうまくいきません・・・

windowsにないのは
#include <unistd.h>
#include <oauth.h>
#include <curl/curl.h>
の3つですが
curlはソースからとってきて
unistdはhttp://d.hatena.ne.jp/deraw/20070517/1179334643から
oauthはTwicppsから取ってきてます

エラー 1 error LNK2019: 未解決の外部シンボル "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl oauth_sign_hmac_sha1(char const *,char const *)" (?oauth_sign_hmac_sha1@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@PBD0@Z) が関数 "void __cdecl oauth_sign_array2_process(class std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > *,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > *,enum OAuthMethod,char const *,char const *,char const *,char const *,char const *)" (?oauth_sign_array2_process@@YAXPAV?$vector@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@std@@PAV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@W4OAuthMethod@@PBD3333@Z) で参照されました。

など8個エラーが出ています。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 9年前
住所: 東海地方
連絡を取る:

Re: Twicppsを利用したTwitterのデータの取得

#14

投稿記事 by softya(ソフト屋) » 5年前

この場合だとヘッダにあるoauth_sign_hmac_sha1関数の実体が無いというリンクエラーです。
#include <oauth.h>とTwicppsのoauthはインターフェイスが違うのでは無いでしょうか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
nullptr
記事: 239
登録日時: 8年前

Re: Twicppsを利用したTwitterのデータの取得

#15

投稿記事 by nullptr » 5年前

C++でTwitter APIを使ってツイート送信、TL取得(RESTとユーザーストリーム両対応)、検索などを行うライブラリを作った事があります。現在でもメンテナンスしているので今でも動きます。
生憎、一般公開するつもりはないのですが、率直な感想だけ載せましょう。

難しいというわけではないですが、一朝一夕で一から作るのは相当大変ですよ。
特定のライブラリを使わないのであれば、
・ソケット等ネットワーク通信プロトコルの実装(特に、TLSプロトコルの実装が必須 脆弱性の問題でSSLは使用できない)
・HTTP1.1プロトコルの実装
・JSONプロトコル、パーサの実装
・OAuth1.1またはOAuth2.0プロトコルの実装
が必要になります。
通信プロトコルの実装は絶望的な難易度、規模ですので、何かしらのライブラリを使うのがオススメです。私はこの部分はboost::asioで代替しています。
HTTPプロトコルはクライアントだけですが、C++は文字列処理ライブラリが貧困であるため、少し難易度が高いです。私はboost::xpressiveで正規表現でのパースを高速化しています。
OAuthプロトコルですが、中規模程度の規格で、規格準拠の実装をする難易度もそこそこです。難易度が高い要因としては、OAuthも文字列処理がメインだからです。ユニコード周りの変換は、linuxならiconvなどが便利です。Windows向けではICUなどがオススメです。
C++を扱うことによる難易度としては、実装がほとんど流布していないことです。C++向けのOAuthライブラリなどはメンテナンスされていなかったり雑な実装であったりすることが多いです。そもそもほとんど存在しません。私はいろいろ試した挙句、自分で規格準拠の実装することが最も適切だと感じました。
通信系はC++でも存在するんですが、C++という言語がそもそもネットワーク処理や文字列処理に特化していないので、それだけで簡単じゃないものになります。

インターネットで検索して出てくるものも、C++でのTwitterAPI叩きは雑なものや、古いものが多い印象です。大抵どこかしら間違いや古い仕様が書かれています。絶対量も少ない。
参考にするなら公式のドキュメントを参照すべきです。

失礼ですが、質問者様はC++での実装ができるレベルには見受けられないので、C++をやめて別の言語を使うほうが良いと思います。質問者様の実力が云々ではなく、C++がそもそも向いていないのです。メンテナンスも大変です。
C++の文字列処理や通信処理の標準実装がない&貧弱なのは、あなたの考える移植性にも難点になります。標準でそれらが用意されている言語なら、移植性を考える必要がなくなります。

私がTwitter APIを実装したのは趣味(とC++への異常愛)ですが、まあそりゃあみんな実装しようと思わない、できないよなあ、と思いました。C++を使うメリットは「C++が好き」「とにかく他の実装より速い」くらいですので、他の言語がいいと思います。javascriptとかrubyとかC#とかが楽な印象です。
 
 
✜ で C ご ✜
: す + 注 :
¦ か + 文 ¦
?
Is the は :
order C++? ✜
     糸冬   
  ――――――――
  制作・著作 NHK
 
 

あかり

Re: Twicppsを利用したTwitterのデータの取得

#16

投稿記事 by あかり » 5年前

softya(ソフト屋) さんが書きました:この場合だとヘッダにあるoauth_sign_hmac_sha1関数の実体が無いというリンクエラーです。
#include <oauth.h>とTwicppsのoauthはインターフェイスが違うのでは無いでしょうか?
回答ありがとうございます。
なるほど、Twicppsのファイルとは違いますか・・・
調べてみてoauthのビルドのサイトなども見つかったので試してみたのですが、ビルドのやり方を間違えているみたいで試すことが出来ませんでした。
nullptr さんが書きました:C++でTwitter APIを使ってツイート送信、TL取得(RESTとユーザーストリーム両対応)、検索などを行うライブラリを作った事があります。現在でもメンテナンスしているので今でも動きます。
生憎、一般公開するつもりはないのですが、率直な感想だけ載せましょう。

難しいというわけではないですが、一朝一夕で一から作るのは相当大変ですよ。
特定のライブラリを使わないのであれば、
・ソケット等ネットワーク通信プロトコルの実装(特に、TLSプロトコルの実装が必須 脆弱性の問題でSSLは使用できない)
・HTTP1.1プロトコルの実装
・JSONプロトコル、パーサの実装
・OAuth1.1またはOAuth2.0プロトコルの実装
が必要になります。
通信プロトコルの実装は絶望的な難易度、規模ですので、何かしらのライブラリを使うのがオススメです。私はこの部分はboost::asioで代替しています。
HTTPプロトコルはクライアントだけですが、C++は文字列処理ライブラリが貧困であるため、少し難易度が高いです。私はboost::xpressiveで正規表現でのパースを高速化しています。
OAuthプロトコルですが、中規模程度の規格で、規格準拠の実装をする難易度もそこそこです。難易度が高い要因としては、OAuthも文字列処理がメインだからです。ユニコード周りの変換は、linuxならiconvなどが便利です。Windows向けではICUなどがオススメです。
C++を扱うことによる難易度としては、実装がほとんど流布していないことです。C++向けのOAuthライブラリなどはメンテナンスされていなかったり雑な実装であったりすることが多いです。そもそもほとんど存在しません。私はいろいろ試した挙句、自分で規格準拠の実装することが最も適切だと感じました。
通信系はC++でも存在するんですが、C++という言語がそもそもネットワーク処理や文字列処理に特化していないので、それだけで簡単じゃないものになります。

インターネットで検索して出てくるものも、C++でのTwitterAPI叩きは雑なものや、古いものが多い印象です。大抵どこかしら間違いや古い仕様が書かれています。絶対量も少ない。
参考にするなら公式のドキュメントを参照すべきです。

失礼ですが、質問者様はC++での実装ができるレベルには見受けられないので、C++をやめて別の言語を使うほうが良いと思います。質問者様の実力が云々ではなく、C++がそもそも向いていないのです。メンテナンスも大変です。
C++の文字列処理や通信処理の標準実装がない&貧弱なのは、あなたの考える移植性にも難点になります。標準でそれらが用意されている言語なら、移植性を考える必要がなくなります。

私がTwitter APIを実装したのは趣味(とC++への異常愛)ですが、まあそりゃあみんな実装しようと思わない、できないよなあ、と思いました。C++を使うメリットは「C++が好き」「とにかく他の実装より速い」くらいですので、他の言語がいいと思います。javascriptとかrubyとかC#とかが楽な印象です。
C++でのTwitter API実装についての必要なものや感想を丁寧に教えていただき、ありがとうございます。
C++でTwitter APIを実装しようと思ったのは、単純に別で作成している処理プログラムに組み込もうと思ったからです。ですがnullptrさんの書いていただいた内容からは、今の私では知識不足だなと思いました。
nullptrさんの仰る通りrubyやC#などの別言語ではサンプルコードもありますので、そちらを実装してみようと思います。C++へはファイル経由やメモリ経由(行けるかな?)などで受け渡ししようかなと思います。さすがにファイル経由ではデータの量がやばそうなのできついですが・・・

回答していただいた皆さん、ありがとうございました。
最終的に別言語での実装という話にはなりましたが、C++で必要なことやTwitterの禁止事項などを知ることが出来ました。
ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る