Hatena::Grouptwitterircgateway

syonbori_techの日記

2010-09-24公式RT尻切れ問題

公式RTが流れてきたとき、元発言が長いと末尾が省略されてしまう問題をやっつけで直した。


--- InsertRetweetMark.cs.org    2010-09-24 16:20:17.000000000 +0900
+++ InsertRetweetMark.cs        2010-09-24 16:15:40.000000000 +0900
@@ -15,7 +15,13 @@
                 CurrentSession.PreFilterProcessTimelineStatus += (sender, e) =>
                                                                      {
                                                                          if (e.Status.RetweetedStatus != null)
-                                                                             e.Text = "♻ " + e.Text;
+                                                                         {
+                                                                             e.Text = String.Format(
+                                                                                 "♻ RT @{0}: {1}",
+                                                                                 e.Status.RetweetedStatus.User.ScreenName,
+                                                                                 e.Status.RetweetedStatus.Text
+                                                                                 );
+                                                                         }
                                                                      };
             }
         }

公式RTのマークが上手く表示されないけどまあいいや…

2009-12-02TIGでfollow中のfriendsを全員取得できないという問題へのパッチ+α

follow中のfriendsを全員取得できないという問題。

どうやら、friends.xml?page=n での取得がうまく行かなくなったみたいなので、friends.xml?cursor=n 形式で処理を行うパッチを書きました。

githubにおいてあります。(TIGのsvnレポジトリrev.675からのパッチです)

http://github.com/syonbori/trivial-repository-of-syonbori/blob/master/TwitterService.cs.20091202.syonbori.patch

XMLSerializer周りをよく理解してないので、変なことをしているかもしれません。あと、_Counterは何をしているのかよくわからなかったので触っていません。

また、以前自分用に書いた「StatusIDからその発言を取得する関数」も入れてあります。これにより、TypeableMapで指定したユーザの「会話」を表示できるようにするスクリプトが使えるようになります。

このスクリプトgithubにおいてあります。

http://github.com/syonbori/trivial-repository-of-syonbori/blob/master/show_conversation.rb

2009-06-25なぜかfriendsが全員取得できない問題

friends取得APIを叩くと次ページがあるのに99人とか98人とかの結果が返ってくる問題パッチ

14:54

以前から(恐らく自分だけ?)発症していた、follow中のfriendsを全員取得できないという問題。

調べてみると、「フォローしている:164人」なのに、APIhttp://twitter.com/friendsで数えてみると、162人しかいないということが発覚。

friendsのページでも、1ページ20人のはずが、たまに19人のページがある。恐らく、数としてはカウントされているが、friendsとしては認識されない不整合エントリでもいるのでしょうか…?

以前、

if (users.User.Length < 100)

の100を99にしたら動いていたのに、昨日あたりから動かなくなっていたのは、今まで1人ヌケが出ていたのが、2人ヌケになったからのようです。

コレに関して思い当たるのが、フォロー申請したがフォロー許可されていない(申請中)人がいるとこのように扱われるのではないか、という仮説です。

今後同じようなことが起こりそうな気がしたので、自分用パッチを作りました。

コンフィグに、FriendsPerPageThresholdという値を追加しています。

Index: trunk/TwitterIrcGatewayCore/Config.cs
===================================================================
--- trunk/TwitterIrcGatewayCore/Config.cs	(revision 601)
+++ trunk/TwitterIrcGatewayCore/Config.cs	(working copy)
@@ -121,6 +121,11 @@
         /// </summary>
         [Description("タイムラインの一回の取得につき何件取得するかを指定します。")]
         public Int32 FetchCount { get; set; }
+        /// <summary>
+        /// フォローしているユーザ一覧を取得する際、次のページが存在するか判断する閾値を指定します。
+        /// </summary>
+        [Description("フォローしているユーザ一覧を取得する際、次のページが存在するか判断する閾値を指定します。")]
+        public Int32 FriendsPerPageThreshold { get; set; }
 
         /// <summary>
         /// デフォルトの設定
@@ -137,6 +142,7 @@
             EnableOldStyleReply = false;
             FetchCount = 50;
             BufferSize = 250;
+            FriendsPerPageThreshold = 100;
 
             if (Default != null)
             {


Index: trunk/TwitterIrcGatewayCore/Session.cs
===================================================================
--- trunk/TwitterIrcGatewayCore/Session.cs	(revision 601)
+++ trunk/TwitterIrcGatewayCore/Session.cs	(working copy)
@@ -745,6 +745,7 @@
             _twitter.EnableRepliesCheck = _config.EnableRepliesCheck;
             _twitter.POSTFetchMode = _config.POSTFetchMode;
             _twitter.FetchCount = _config.FetchCount;
+            _twitter.FriendsPerPageThreshold = _config.FriendsPerPageThreshold;
             _twitter.RepliesReceived += new EventHandler<StatusesUpdatedEventArgs>(twitter_RepliesReceived);
             _twitter.TimelineStatusesReceived += new EventHandler<StatusesUpdatedEventArgs>(twitter_TimelineStatusesReceived);
             _twitter.CheckError += new EventHandler<ErrorEventArgs>(twitter_CheckError);


Index: trunk/TwitterIrcGatewayCore/TwitterService.cs
===================================================================
--- trunk/TwitterIrcGatewayCore/TwitterService.cs	(revision 601)
+++ trunk/TwitterIrcGatewayCore/TwitterService.cs	(working copy)
@@ -206,6 +206,14 @@
         }
 
         /// <summary>
+        /// フォローしているユーザ一覧を取得する際、次のページが存在するか判断する閾値を指定します。
+        /// </summary>
+        public Int32 FriendsPerPageThreshold {
+            get;
+            set;
+        }
+
+        /// <summary>
         /// 認証情報を問い合わせます。
         /// </summary>
         /// <return cref="User">ユーザー情報</returns>
@@ -312,7 +320,7 @@
                         else
                         {
                             usersList.AddRange(users.User);
-                            if (users.User.Length < 100)
+                            if (users.User.Length < FriendsPerPageThreshold)
                                 break;
                         }
                     }

swirhenswirhen2009/06/25 19:38TIGのヘビーユーザー集団ってfollowing1000越えとかザラにいて、Userlistの取得とかに余り重きを置いてる人がいないんでこういう問題は見過ごされがちですね。なんかまゆきち先生が別のやり方を考えてるようなので場当たり対処でお待ち下さい。