1

次のクエリは、SinceID または MaxID 句のいずれかをコメント アウトすると正常に動作しますが、両方が含まれていると「不正な URL」例外が生成されます。

var maxId = ulong.MaxValue;
var sinceId = (ulong)341350918903701507;

var searchResult =
(
   from search in ctx.Search
      where search.Type == SearchType.Search &&
      search.ResultType == ResultType.Mixed &&
      search.Query == "red wedding" &&
      search.SinceID == sinceId &&
      search.MaxID == maxId &&
      search.IncludeEntities == false &&
      search.Count == 200
    select search).SingleOrDefault();
4

4 に答える 4

1

Fiddler でクエリの結果を見ると、応答が次のようになっていることがわかります。

{"errors":[{"code":195,"message":"Missing or invalid url parameter"}]}

Twitter がなぜ、SinceID と MaxID の両方を使用したクエリを受け入れないのかについては、お答えできません。ただし、クエリは正しく形成されており、この特定のシナリオのこれら 2 つのパラメーター間の関係に関する制約を説明するドキュメントはありません。MaxID の目的は、次のクエリで返される最上位のツイートの ID にすることです。MaxID と sinceID はどちらも、データのページングを支援することを目的としています。これを行う方法についてのブログ投稿を書きました。

LINQ to Twitter でタイムラインを操作する

于 2013-06-07T05:00:06.257 に答える
1

私はあなたと同じ問題を抱えているようですので、私が持っている唯一の解決策は手動で行うことでした.

var searchResult =
            (
                from search in TwitterCtx.Search
                where search.Type == SearchType.Search &&
                      search.Query == query &&
                      search.Count == pageSize &&
                      search.IncludeEntities == true &&
                      search.ResultType == ResultType.Recent &&
                      search.SinceID == sinceId
                select search
            ).SingleOrDefault<Search>();

resultList = searchResult.Statuses;

次に、他のツイートを検索する必要があるため (新しいツイートの数が pageSize より多い場合)、次のような while ループがありました。

ulong minId = ulong.Parse(resultList.Last<Status>().StatusID) - 1;
List<Status> newList = new List<Status>();

 while (minId > sinceId)
 {
    resultList.AddRange(newList);

    searchResult =
        (
            from search in TwitterCtx.Search
            where search.Type == SearchType.Search &&
                search.Query == query &&
                search.Count == pageSize &&
                search.IncludeEntities == true &&
                search.ResultType == ResultType.Recent &&
                search.MaxID == minId &&
                search.SinceID == sinceId
             select search
        ).SingleOrDefault<Search>();

    newList = searchResult.Statuses;
    if (newList.Count == 0)
         break;

    minId = ulong.Parse(newList.Last<Status>().StatusID) - 1;
}

何らかの理由で、sinceId と maxId の両方を使用できるようになりました。

于 2013-07-25T07:53:00.363 に答える