制作中のADV「明日、初めて彼女と❤」はツイッターで出会った二人のストーリーなんですが、
実際にゲームからツイートできるような機能があったらいいかもな~と思って実装してみました!
今回はその実装にあたって調べたことをまとめています。
なので続きはゲームを作っている方向けです。(実装に使ったC++のコードも載せておきます。)
ツイート機能を提供するには以下の2通りのやり方があります。
1.TwitterAPIを利用する方法
2.ウェブインテントを利用する方法
1.TwitterAPIを利用する方法
プレイヤーのツイッターアカウントを直接ゲームプログラムから操作する方法です。
直接操作するので動画や画像アップロードもできるし、プログラム側で作ったツイート内容を編集を介さずにツイートすることができます。
(ツイート内容を編集できるようにするには編集画面を自前で作る必要がありそうです。)
組み込むにあたってデベロッパー申請が必要だったり、プレイヤーにもアプリ認証をしてもらう必要があります。
このAPIを利用するためのC++のライブラリではtwitcurlというのが有名なようです。
Pythonで作るのが簡単だという話もあったり?私にはPythonわからないのでなんともですが・・・
2.ウェブインテントを利用する方法
ツイート編集画面のURLをブラウザで開く方法です。
URLを準備するだけなので簡単ですが、1のように画像や動画のアップロードはできません。
(画像をツイートできないわけではないですが、プレビューはできません。画像ツイートの方法についてはみかづきブログ その3 画像付きツイートの仕様を調べてタイムラインに画像を埋め込んだツイートを投稿するボタンをつくるに仕様など詳しく書かれていましたので参考になると思います。)
URLにパラメータをつけることでリプやハッシュタグをつけたりツイート後に任意のアカウントをおすすめユーザーに表示することができます。
私は何の保証もないフリーゲームに自分のツイッターアカウントが操作されるってなると抵抗を感じるので、
作る側としても1の方法をとるのはなんだかなぁと思っていました。
当初やり方を探していた時は1の方法ばかりヒットして無駄に調べてしまいましたが(汗
そんなこんなで2の方法で実装しました。
実装について
C++での実装の順番
1.ウェブインテントURLの用意
2.URLをブラウザで開くプログラムを作成(DXライブラリ使用の場合は実行ファイル化しておく)
3.(DXライブラリ使用の場合)URLをブラウザで開く実行ファイルを開くプログラムを作成
DXライブラリ使用の場合の実装についてはC言語何でも質問掲示板 ShellExecuteの動作についてのページを参考にしています。
1.ウェブインテントURLの用意
まずは実際のURLをどん!
https://twitter.com/intent/tweet?text=テストツイートです%0D%0A%23ウェブインテント&related=CreationShinki
↑のURLにとんでみるURLの構造は「https://twitter.com/intent/tweet?」にパラメータをくっつけるだけです。
textはツイート内容、relatedは表示させたいおすすめユーザーのIDです。
パラメータについて詳しくはTwitter Developer Platform Web Intent URLのページに色々書いてあります。
hashtagsパラメータもありますが、textパラメータ内にスペースや改行を入れてハッシュタグを書いても大丈夫です。
URLで改行とか無理やん・・・ってなった方は文面を用意してからURLエンコード・デコードのページを利用するといいと思います。
2.URLをブラウザで開くプログラムを作成
こんな感じのをベースにしています。
#include <Windows.h> #include <tchar.h> int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { ShellExecute(NULL, _T("open") , _T("https://twitter.com/intent/tweet?text=テストツイートです%0D%0A%23ウェブインテント&related=CreationShinki") , NULL, NULL, SW_SHOWNORMAL); return 0; }
ShellExecute関数では既定のブラウザでURLを開くことができます。
第三パラメータを任意のURLに書き換えてください。
3.URLをブラウザで開く実行ファイルを開くプログラムを作成
参考にした掲示板にDXライブラリとShellExecute関数が相性が悪いというような話があったので、↑のプログラムは実行ファイルにしておいて、ゲーム内の「ツイートをする」ボタンを押したときにCreateProcess関数でその実行ファイルを開く方法をとっています。
関数の実行に必要な構造体もあるのでゲーム側にはこんな感じの関数を用意してやります。
void tweet(){ STARTUPINFO si; PROCESS_INFORMATION pi; SecureZeroMemory(&si, sizeof(si)); si.cb = sizeof(si); SecureZeroMemory(&pi, sizeof(pi)); if (CreateProcess(_T("実行ファイル.exe"), NULL, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) { WaitForSingleObject(pi.hProcess, INFINITE); CloseHandle(pi.hProcess); CloseHandle(pi.hThread); } }
ボタンが押された瞬間に一度だけこの関数を呼んでやればブラウザが立ち上がってツイートの編集画面になるはずです~
というわけで、ゲームにツイートボタンをつけてみた!でした!
しんき創作のツイッターアカウントもよろしくね!
次回に続く≫