ツール名称=「Twidl」
ツールver=「1.5」
ツールバージョン=「{ツール名称} ver.{ツールver}」

#固定の変数

母艦のテキストは「{ツールバージョン}」
# 時刻
今を「:」で区切る。
時はそれ[0]
分はそれ[1]
秒はそれ[2]

# 日付
今日を「/」で区切る。
年はそれ[0]
月はそれ[1]
日はそれ[2]

文字サイズは18
「{ツールバージョン}」と表示

！CR=「{\13}」
！LF=「{\10}」



#最初の質問

「ユーザー名(@********){改行}※@は入れても入れなくても構いません。」と尋ねる
それを英数半角変換
それを小文字変換
もし、それ=空ならば、
　おしまい3
違えば、
 それの「@」を空に置換
 ユーザー名=それ

「保存するフォルダーの位置を選択してください。｛改行｝サムネイルを保存する場合は余裕がある場所にしてください。」と言う。
　フォルダ選択
もし、それ=空ならば、
　おしまい3
違えば、
　ディレクトリ位置=それ


「開始地点(空欄で最新から)」と尋ねる
開始地点=それ

「取得件数(空欄で全件)」と尋ねる
件数=それ*1

「読み込み間隔(ミリ秒、無記入で無遅延)」と尋ねる
もし、それ=空ならば、
　遅延=-1
違えば、
　遅延=それ


「サムネイルを保存」で二択
もし、それ=1ならば、
　画像DL=1
違えば、
　画像DL=0
　
「phantomjsの使用」で二択
もし、それ=1ならば、
　whotwiDL=1
違えば、
　whotwiDL=0

「デバッグモードの使用」で二択
もし、それ=1ならば、
　debmode=1
違えば、
　debmode=0
/*
質問おわり
ここから画面配置
*/
文字サイズは11
核とはボタン
そのテキストは「中断」
そのYは200
そのクリックした時は
　「処理は中断されています{改行}再開する場合はOKを押してください。」という
　

核ドラムとはボタン
そのテキストは「終了」
そのYは300
そのクリックした時は
　　おしまい2


/*
画面配置おわり
ここからディレクトリ作成&サムネ取得
*/

ディレクトリ位置&ユーザー名にフォルダ作成
ユーザrootディレクトリ=「{ディレクトリ位置}{ユーザー名}\」
ユーザrootディレクトリ&「{ユーザー名}-｛年｝-｛月｝-｛日｝-｛時｝-｛分｝」にフォルダ作成
ユーザディレクトリ=「{ユーザrootディレクトリ}{ユーザー名}-｛年｝-｛月｝-｛日｝-｛時｝-｛分｝\」
ユーザディレクトリ2=「{ユーザrootディレクトリ}{ユーザー名}-｛年｝-｛月｝-｛日｝-｛時｝-｛分｝」
もし、画像DLが1ならば
　ユーザディレクトリ&『\』&picにフォルダ作成
もし、debmodeが1ならば
　ユーザディレクトリ&『\』&debにフォルダ作成
　ユーザディレクトリ&『\』&deb&『\』&jsonにフォルダ作成
　ユーザディレクトリ&『\』&deb&『\』&decodeにフォルダ作成
　ユーザディレクトリ&『\』&deb&『\』&htmlにフォルダ作成
ユーザpicディレクトリ=「{ユーザディレクトリ}pic\」
ユーザdebディレクトリ=「{ユーザディレクトリ}deb\」

/*
ディレクトリ作成おわり
ここからID取得
*/

「https://whotwi.com/{ユーザー名}」からHTTPデータ取得
もし、debmodeが1ならば
　それをユーザdebディレクトリ&『\』&html&『\』&「whotwi-{ユーザー名}-｛年｝-｛月｝-｛日｝-｛時｝-｛分｝.html」に保存#debug用
それをutf8からsjisへ文字コード変換
LFを「{\13}{\10}」に置換
whotwiソース=それ

whotwiソースで「非公開」が何文字目
もし、それ=0ならば
　whotwiソースで「公開」が何文字目
　もし、それ=0ならば
　　ユーザ状態=「存在しないユーザ」
　違えば、
　　ユーザ状態=「公開」
違えば、
　ユーザ状態=「非公開」

//HPソース
「https://twitter.com/{ユーザー名}」からHTTPデータ取得
もし、debmodeが1ならば、
　それをユーザdebディレクトリ&『\』&html&『\』&「twitterHP-{ユーザー名}-｛年｝-｛月｝-｛日｝-｛時｝-｛分｝.html」に保存#debug用
それをutf8からsjisへ文字コード変換
LFを「{\13}{\10}」に置換
ID取得用ソース=それ
ID取得用ソースの「statuses_count&quot;:」から「,&quot」まで範囲切り取る#ツイート数
ツイート数=それ
ID取得用ソースの「friends_count&quot;:」から「,&quot」まで範囲切り取る#フォロー数
フォロー数=それ
ID取得用ソースの「followers_count&quot;:」から「,&quot」まで範囲切り取る#フォロワー数
フォロワー数=それ
ID取得用ソースの「favourites_count&quot;:」から「,&quot」まで範囲切り取る#お気に入り数(旧リスト数)
お気に入り数=それ
/*
ID取得用ソースの「<span class="ProfileHeaderCard-locationText u-dir" dir="ltr">」から「</span>」まで範囲切り取る#場所
場所=それ
ID取得用ソースの「<p class="ProfileHeaderCard-bio u-dir" dir="ltr">」から「</p>」まで範囲切り取る#説明文
説明文=それ
ID取得用ソースの「<span data-original-title="」から「" class="ProfileHeaderCard-joinDateText js-tooltip u-dir"」まで範囲切り取る#登録日
登録日=それ
*/
ID取得用ソースの「.bundle.css&quot;,&quot;profile_id&quot;:」から「,&quot;」まで範囲切り取る#固定ID
固定ID=それ
ID取得用ソースの「<strong class="fullname js-action-profile-name show-popup-with-id" data-aria-label-part>」から「</strong>」まで範囲切り取る
変更可能なユーザー名=それ
ID取得用ソースの「<a class="u-textUserColor" target="_blank" rel="me nofollow" href="」から「" ti」まで範囲切り取る
tcoリンク=それ


/*
mobileソース
「https://mobile.twitter.com/{ユーザー名}」からHTTPデータ取得
それをutf8からsjisへ文字コード変換
LFを「{\13}{\10}」に置換
ID取得用mobileソース=それ
ID取得用mobileソースの「<div class="location">」から「</div>」まで範囲切り取る#場所
場所=それ
ID取得用mobileソースの「<div class="bio">」から「</div>」まで範囲切り取る#説明文
それの「<div class="dir-ltr" dir="ltr">」を空に置換
それの「{\13}{\10}」を空に置換
説明文=それ
*/

//http://m.twilog.orgソース
「http://m.twilog.org/{ユーザー名}」からHTTPデータ取得
もし、debmodeが1ならば
　それをユーザdebディレクトリ&『\』&html&『\』&「twilog-{ユーザー名}-｛年｝-｛月｝-｛日｝-｛時｝-｛分｝.html」に保存#debug用
LFを「{\13}{\10}」に置換
ID取得用twilogソース=それ
ID取得用twilogソースの「Twitter歴:」から「<br />」まで範囲切り取る#登録日
それの「日（」から「より）」まで範囲切り取る#登録日
登録日=それ

ID取得用twilogソースの「現在地:」から「<br />」まで範囲切り取る#場所
場所=それ

ID取得用twilogソースの「自己紹介:」から「<br />」まで範囲切り取る#説明文
説明文=それ



ファイルA=「{変更可能なユーザー名}(@{ユーザー名})の設定{改行}固定ID　{固定ID}{改行}ツイート数　{ツイート数}{改行}フォロー数　{フォロー数}{改行}フォロワー数　{フォロワー数}{改行}お気に入り登録数　{お気に入り数}{改行}説明文　{説明文}{改行}場所　{場所}{改行}登録日　{登録日}{改行}t.coリンク　{tcoリンク}{改行}ユーザの状態　{ユーザ状態}{改行}取得ツール　{ツールバージョン}{改行}end.」
ファイルAをユーザディレクトリ&「TwitterUserSettings-{ユーザー名}-｛年｝-｛月｝-｛日｝-｛時｝-｛分｝.txt」に保存

ID取得用ソースの「src="https://pbs.twimg.com/profile_banners/」から「"」まで範囲切り取る
バナー可変部=それ
プロフィール画像URL=「https://pbs.twimg.com/profile_banners/{バナー可変部}」#バナーアドレス


ID取得用ソースの「ProfileAvatar-image " src="」から「"」まで範囲切り取る　#アイコンのアドレス取得
アイコンURL=それ

もし、ユーザ状態=「公開」ならば
　アイコンURLをユーザディレクトリ&「TwitterIcon-{ユーザー名}-｛年｝-｛月｝-｛日｝-｛時｝-｛分｝.jpg」へHTTPダウンロード
　プロフィール画像URLをユーザディレクトリ&「TwitterProfileBanner-{ユーザー名}-｛年｝-｛月｝-｛日｝-｛時｝-｛分｝.jpg」へHTTPダウンロード

もし、ユーザ状態=「非公開」ならば
　アイコンURLをユーザディレクトリ&「TwitterIcon-{ユーザー名}-｛年｝-｛月｝-｛日｝-｛時｝-｛分｝.jpg」へHTTPダウンロード
　プロフィール画像URLをユーザディレクトリ&「TwitterProfileBanner-{ユーザー名}-｛年｝-｛月｝-｛日｝-｛時｝-｛分｝.jpg」へHTTPダウンロード

/*
ID取得おわり
ここから本動作
*/

　
もし、開始地点=空ならば、
　「https://twitter.com/{ユーザー名}」からHTTPデータ取得
　それの「data-max-position="」から「"」まで範囲切り取る　#ツイート取得範囲の指定子
　それに加算する
　B=それ
違えば、
　B=開始地点
//Bを言う
A=B
C=空




結果=「ツイートID,日時,位置情報,本文,リプライ先user,リプライ先status,RT数,fav数,メディアURL」&改行
ソースアドレスcsv=「ソース取得回数,ソース取得URL」&改行

I=-1
ソース回数=0




#1回のフェッチ(20件)の処理
1でループ
　I=I+1
　母艦は「{ツールバージョン} ツイート内容DL中　標的:{変更可能なユーザー名}(@{ユーザー名})　現在{I}件目」
　ソースURL=「https://twitter.com/i/search/timeline?q=from%3A{ユーザー名}&src=typd&vertical=default&f=tweets&include_available_features=1&include_entities=1&last_note_ts=1&max_position=TWEET-{A}-{B}」
　「https://twitter.com/i/search/timeline?q=from%3A{ユーザー名}&src=typd&vertical=default&f=tweets&include_available_features=1&include_entities=1&last_note_ts=1&max_position=TWEET-{A}-{B}」からHTTPデータ取得
　json内容=それ
　それをJSONデコード
　内容=それ
　
　//デバッグモード
　もし、debmodeが1ならば
　　ソース取得回数=ソース取得回数+1
　　json内容をユーザdebディレクトリ&『\』&json&『\』&「json-{ソース取得回数}-{ユーザー名}-｛年｝-｛月｝-｛日｝-｛時｝-｛分｝.json」に保存
　　内容をユーザdebディレクトリ&『\』&decode&『\』&「decode-{ソース取得回数}-{ユーザー名}-｛年｝-｛月｝-｛日｝-｛時｝-｛分｝.txt」に保存
　　
　　debtxt\0=ソース取得回数
　　debtxt\1=ソースURL
　　
　　ソースアドレスcsvにdebtxtを配列追加
　　
　　//おわり
　
　//2015-10の仕様変更対応
　内容で「has_more_items=0」が何バイト目
　もし、それ=0ならば、
　違えば、
　　内容で「new_latent_count=0」が何バイト目
　　もし、それ=0ならば、
　　違えば、
　　　内容で「data-aria-label-part="0">」が何文字目
　　　　もし、それ=0ならば、
　　　　　抜ける
　
　/*
　#昔のループ抜け
　内容から16バイト左部分
　もし、それ=「has_more_items=0」ならば、　#もっと古いツイートがあるか、無ければループ終了
　　内容で「<li」が何文字目　#↑がたまにおかしい(まだあるのに0を返す)っぽいので再確認
　　もし、それ=0ならば、
　　　抜ける
　*/
　
　
　内容から300バイト右部分
　それを「.*-(\d+)-(\d+)」で正規表現マッチ
　//B=A
　C=A
　A=抽出文字列\0
　B=抽出文字列\1
　
　データ=内容
　//データを言う
　
　
　
　#ツイート単位の処理
　1でループ
　　データの「<li class="js-stream-item stream-item stream-item expanding-stream-item」から「<button type="button" class="dropdown-link">ツイートをサイトに埋め込む</button>」まで範囲切り取る
　　もし、それ=空ならば、
　　　抜ける
　　
　　内容=それ
　　//内容を言う
　　
　　処理=空
　　内容の「data-tweet-id="」から「"」まで範囲切り取る
　　ID=それ
　　
　　内容の「data-time="」から「"」まで範囲切り取る
　　それをUNIXTIME_日時変換
　　日時=それ
　　
　　内容の「<span class="Tweet-geo u-floatRight js-tooltip" title="」から「"」まで範囲切り取る
　　位置=それ
　　
　　内容の「data-aria-label-part="0">」から「</p>」まで範囲切り取る
　　もし、それ=空ならば、
　　　内容の「data-aria-label-part="4">」から「</p>」まで範囲切り取る　#引用RTの場合多分これ
　　それからタグ削除
　　ツイート=それ
　　
　　メディア=空
　　内容で「埋め込み画像への固定リンク」が何文字目
　　もし、それ=0でなければ、　#twimgの場合
　　　1でループ　#画像が複数枚の場合があるので
　　　　内容の「data-img-src="」から「"」まで範囲切り取る
　　　　もし、それ=空ならば、
　　　　　抜ける
　　　　
　　　　//それを言う
　　　　URL=それ
　　　　もし、メディア=空ならば、
　　　　　メディア=URL
　　　　違えば、
　　　　　メディア=メディア&「,」&URL
　　　　もし、画像DL=1ならば、

　　　　　URLを空に画像DL保存
　　違えば、
　　　内容で「<div class="js-macaw-cards-iframe-container"」が何文字目
　　　もし、それ=0でなければ、　#非公式の場合
　　　　「https://twitter.com/i/cards/tfw/v1/{ID}?cardname=summary&earned=true#xdm_e=https%3A%2F%2Ftwitter.com&xdm_c=default649&xdm_p=1」からHTTPデータ取得
　　　　カード=それ
　　　　それの「TwitterCard-thumbnail" src="」から「"」まで範囲切り取る
　　　　もし、それ=空でなければ、　#画像の場合
　　　　　URL=それ
　　　　　メディア=URL
　　　　　もし、画像DL=1ならば、
　　　　　　URLをIDに画像DL保存
　　　　違えば、　#動画の場合(Vineのみ対応)
　　　　　カードで「data-screen-name="vine" href="https://twitter.com/vine">」が何文字目
　　　　　もし、それ=0でなければ、
　　　　　　カードの「<iframe src="」から「"」まで範囲切り取る
　　　　　　それからHTTPデータ取得
　　　　　　それの「thumbnailUrl":"」から「"」まで範囲切り取る
　　　　　　それの『\』を空に置換
　　　　　　URL=それ
　　　　　　メディア=URL
　　　　　　もし、画像DL=1ならば、
　　　　　　　URLをIDに画像DL保存2
　　
　　内容で「data-is-reply-to="true"」が何文字目
　　もし、それ=0ならば、
　　　リプライu=空
　　　リプライs=空
　　違えば、
　　　「https://twitter.com/i/expanded/batch/{ID}?facepile_max=9&include%5B%5D=social_proof&include%5B%5D=ancestors&include%5B%5D=descendants&page_context=search&section_context=default_tweets」からHTTPデータ取得
　　　それをJSONデコード
　　　リプ情報=それ
　　　//それを言う
　　　
　　　#descendant　古い子ツイート(当該ツイート「への」リプライ)　…　descendant　新しい子ツイート
　　　#ancestor　古い親ツイート(当該ツイート「から」のリプライ先)　…　ancestor　新しい親ツイート
　　　#となっているので、一番下のancestorが直上のリプライ先になる
　　　1でループ
　　　　リプ情報の「ancestor」&CHR($0A)から「endoffile」まで範囲切り取る　#ancestorsとかいうややこしい識別子があるので区別のためにLFを追加
　　　　もし、それ=空ならば、
　　　　　抜ける
　　　　リプ情報=それ
　　　リプ情報の「data-tweet-id="」から「"」まで範囲切り取る
　　　リプライs=それ
　　　リプ情報の「data-user-id="」から「"」まで範囲切り取る
　　　リプライu=それ
　　
　　#どうせ取れるので取っておく
　　内容の「<span class="ProfileTweet-action--retweet u-hiddenVisually">」から「</span>」まで範囲切り取る
　　それの「<span class="ProfileTweet-actionCountForAria" data-aria-label-part>」から「件のリツイート」まで範囲切り取る
　　RT=それ
　　
　　内容の「<span class="ProfileTweet-action--favorite u-hiddenVisually">」から「</span>」まで範囲切り取る
　　それの「<span class="ProfileTweet-actionCountForAria" data-aria-label-part>」から「件のお気に入り」まで範囲切り取る
　　fav=それ
　　
　　処理\0=ID
　　処理\1=日時
　　処理\2=位置
　　処理\3=ツイート
　　処理\4=リプライu
　　処理\5=リプライs
　　処理\6=RT
　　処理\7=fav
　　処理\8=メディア
　　結果に処理を配列追加
　　
　　//結果を言う
　
　
　
　もし、件数=0でなければ、
　　もし、I≧件数ならば、
　　　抜ける
　
　もし、遅延=-1でなければ、
　　(遅延)/1000秒待つ




結果出力

もし、debmodeが1ならば
　deb結果出力

もし、whotwiDL=1ならば
　母艦は「{ツールバージョン}　現在phantomjsの実行中」
　「phantomjsの実行中です。しばらくお待ちください。」と表示
　0.5秒待つ
　「{作業フォルダ取得}\bin\phantomjs.exe {作業フォルダ取得}\bin\rasterize.js http://whotwi.com/{ユーザー名} {ユーザディレクトリ}\{ユーザー名}-whotwi-ja-｛年｝-｛月｝-｛日｝-｛時｝-｛分｝.png」をコマンド実行。
　3秒待つ
　「{作業フォルダ取得}\bin\phantomjs.exe {作業フォルダ取得}\bin\rasterize.js http://twitter.com/{ユーザー名} {ユーザディレクトリ}\{ユーザー名}-TL-｛年｝-｛月｝-｛日｝-｛時｝-｛分｝.png」をコマンド実行。
　3秒待つ
　「{作業フォルダ取得}\bin\phantomjs.exe {作業フォルダ取得}\bin\rasterize.js http://zh-tw.whotwi.com/{ユーザー名} {ユーザディレクトリ}\{ユーザー名}-whotwi-zhtw-｛年｝-｛月｝-｛日｝-｛時｝-｛分｝.png」をコマンド実行。


「アーカイブしますか？」で二択
もし、それ=1ならば、
　アーカイブ処理

もし、ユーザ状態=「公開」ならば
　おしまい

もし、ユーザ状態=「非公開」ならば
　おしまい7

もし、ユーザ状態=「存在しないユーザ」ならば
　おしまい8


#max_position「未満」を取る仕様っぽいので1足す
#そのまま数値として扱うと桁数が多く指数形式になってしまうので文字列として扱う
●加算(STRに)
　STRを文字列分解
　桁=それ
　(桁の行数)回
　　もし、桁\(桁の行数-回数)=9ならば、
　　　桁\(桁の行数-回数)=0
　　違えば、
　　　桁\(桁の行数-回数)=桁\(桁の行数-回数)+1
　　　抜ける
　　もし、回数=(桁の行数)ならば、
　　　桁\0=10
　桁を空で配列結合
　それで戻る



●画像DL保存(URLを,ファイル名に)
　URLを「/」で区切る
　パス=それ
　もし、ファイル名=空ならば、
　　ファイル名=パス\(パスの行数-1)
　違えば、
　　それを「proxy(\..+)\?」で正規表現マッチ
　　もし、抽出文字列=空ならば、
　　　抽出文字列=「.jpg」
　　ファイル名=ファイル名&抽出文字列
　/*パス=それ
　パス\(パスの行数-1)の「?」を「!」に置換*/
　//URLからURLファイル名抽出
　からさわ=URL&「:」&orig
　URL=からさわ
　URLをユーザpicディレクトリ&ファイル名へHTTPダウンロード
　
●画像DL保存2(URLを,ファイル名に)
　URLを「/」で区切る
　パス=それ
　もし、ファイル名=空ならば、
　　ファイル名=パス\(パスの行数-1)
　違えば、
　　それを「proxy(\..+)\?」で正規表現マッチ
　　もし、抽出文字列=空ならば、
　　　抽出文字列=「.jpg」
　　ファイル名=ファイル名&抽出文字列
　/*パス=それ
　パス\(パスの行数-1)の「?」を「!」に置換*/
　//URLからURLファイル名抽出
　URLをユーザpicディレクトリ&ファイル名へHTTPダウンロード



●結果出力
　結果を表CSV変換
　それをユーザディレクトリ&「{ユーザー名}-｛年｝-｛月｝-｛日｝-｛時｝-｛分｝.csv」に保存

●deb結果出力
　ソースアドレスcsvを表CSV変換
　それをユーザdebディレクトリ&「{ユーザー名}-｛年｝-｛月｝-｛日｝-｛時｝-｛分｝.csv」に保存

●おしまい
　「すべて処理が完了しました」と言う。
　終了

●おしまい2
　「処理がユーザの手によって中断されました。{改行}プログラムを終了します。」と言う。
　終了
　
●おしまい3
　「空欄はダメです。{改行}プログラムを終了します。」という。
　終了

●おしまい4
　「ツイッターに接続できません。{改行}ネットワークの接続を確認して下さい。{改行}プログラムを終了します。」という。
　終了

●おしまい5
　「@{ユーザー名}のタイムラインを見ることができません。{改行}ユーザー名が間違っている可能性があります。{改行}プログラムを終了します。」という。
　終了

●おしまい6
　「@{ユーザー名}のツイログを見ることができませんでした。{改行}ただしtwitter検索からは取得できています。{改行}プログラムを終了します。」という。
　終了

●おしまい7
　「@{ユーザー名}は非公開です。{改行}多くのログがが取得できていないと思います。{改行}プログラムを終了します。」という。
　終了
　
●おしまい8
　「@{ユーザー名}は存在しないユーザの可能性が高いです。入力したユーザー名を確認してみてください。{改行}プログラムを終了します。」という。
　終了

●アーカイブ処理
　ユーザrootディレクトリに作業フォルダ変更
　ユーザディレクトリ2を「{ユーザー名}-｛年｝-｛月｝-｛日｝-｛時｝-｛分｝.zip」へ圧縮。
