2013年10月30日水曜日

自作Twitterクライアント作成の記録(12)RTの取り消しでの苦労

地道に開発を続けてるこのソフト、ほんと地味だね。
関係ないですねはい・・・


さて、このクライアント基本機能はそろってきてますが・・・実はまだ基本機能で使えないものがあります。
それは・・・
ふぁぼ(お気に入り)とリツイートの取り消しが出来ない!

これできないと面倒ですよね・・・
で、記事タイトルから予想がつくと思われますが、ふぁぼの取り消しにいたってはかなり簡単に実装できました

        //お気に入りボタンクリック時の挙動
        private void button3_Click(object sender, EventArgs e)
        {
            if (!tweets.Favorited)
            {
                var status = F2TwitterCtx.CreateFavorite(tweets.StatusID);
                button3.Text = "お気に入り済み";
                tweets.Favorited = true;
            }
            else
            {
                var status = F2TwitterCtx.DestroyFavorite(tweets.StatusID);
                button3.Text = "お気に入り";
                tweets.Favorited = false;
            }
        }

こんな風にふぁぼ取り消し用の関数が存在してるのでこれは簡単だったんですよこれは

ええ、ここまで言えば予想がついてる方も多いはず、実はRTは取り消し用の関数なんて存在していません。
というか調べたら、ツイッターのAPIにRTを取り消すという項目が見当たりません。(もしかして見逃した?)

・・・・困った(´・ω・`)
どうしたらいいんだ・・・こういうときに日本語サイトで解説されていないとつらいですね(私は英語が読めない書けない話せないの三拍子)

というわけで、気合とノリだけを武器に英語で検索し、サイトを漁ってみると同じことで悩んでた外人さんを発見&解決済みだったので、翻訳の力を借りつつがんばって解読したところ。

・RTしたツイートはもとのツイートIDとは違うIDで投稿されている。
・そのIDのツイートを削除すれば、RTを解除したことになる。

とのことでした
※原文そのままを読みたい人はここのリンクからどうぞ(もちろん別サイトにジャンプします)

というわけで、こんな感じに組んでみました

        private void button2_Click(object sender, EventArgs e)
        {
            //リツイートされてるかされてないかの判断
            if (!tweets.Retweeted)
            {
               
                //されてなかったら
                DialogResult result = MessageBox.Show("リツートしてよろしいですか?", "確認", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
                if (result == DialogResult.Yes)
                {
                   var retweet = F2TwitterCtx.Retweet(tweets.StatusID);
                    button2.Text = "リツイート済み";
                    tweets.Retweeted = true;
                    unretweet = retweet.StatusID;   //RT後のIDの保管
                }
            }
            else
            {
                //されていたら
                var undoneRetweetStatus = F2TwitterCtx.DestroyStatus(unretweet);
                button2.Text = "リツイート";
                tweets.Retweeted = false;
            }
        }

※unretweetはグローバルでstring型として宣言してます。
という風にイベントハンドラを書き換えてみました。

しかし、これだと新たな問題が・・・
RT後のIDを一つのツイートしか保存できない

しかもこの問題、まだ解決策を練れてません。(候補はいくつかあるがまだ試してない)
まあ、とりあえずどちらも取り消しができるということで、今回はこれで・・・

0 件のコメント:

コメントを投稿