2

google-javi-api などを使用して、ユーザーの Google カレンダーにアクセスするための URL を作成しています。

CalendarUrl url = CalendarUrl.forEventFeed("accountName", "private", "full");

これは私にこのURLを返します:

"https://www.google.com/calendar/feeds/user@gmail.com/private/full?prettyprint=true"

URL が最終的に次のようになるように、startMin および startMax パラメーターを使用してこの URL にパラメーターを設定したいと思います。

"https://www.google.com/calendar/feeds/default/private/full?start-min=2011-06-00T00:00:00&start-max=2011-06-24T23:59:59"

これに対する私の試みはすべて失敗しました。返された URL をログに記録した後、「?」は「%3F」に置き換えられ、アンパサンドは「&」に置き換えられます

返される間違った URL は次のとおりです。

"https://www.google.com/calendar/feeds/default/private/full%3Fstart-min=2011-06-00T00:00:00&start-max=2011-06-24T23:59:59"

結果セットが null である理由は、これらの文字の置換のためだと確信しています。元の URL に新しいパラメーターを追加するにはどうすればよいですか?

**この URL をどのように構築しているのか疑問に思われている方のために、このサンプル Android 実装の Google CalendarのCalendarURLクラスを使用しています。

編集

具体的には、CalendarURLクラスで、URL の「パス」にパーツを追加できますが、クエリ パラメータを含める方法が見つかりません。この API にはパラメータを指定する方法が含まれていませんか?

4

2 に答える 2

4

google-java-client-api を使用して URL を作成する適切な方法は、GoogleUrl オブジェクトを拡張することです。(ここではサンプルとして Google Latitude を使用しています。GoogleUrl オブジェクトを作成します。後で、それがどのように使用されるかを確認します)。

Google URL オブジェクト

  • GoogleUrl を拡張した URL オブジェクトを作成します
  • @Key アノテーションを使用して、URL でカスタマイズしたいパラメーターにアノテーションを付けます。
  • ルート URL を受け取るコンストラクターを提供します。
  • pathParts.add メソッドを使用して、パーツをコンテキストに追加します。

サンプルの URL オブジェクトは次のようになります。

public final class LatitudeUrl extends GoogleUrl {

  @Key
  public String granularity;

  @Key("min-time")
  public String minTime;

  @Key("max-time")
  public String maxTime;

  @Key("max-results")
  public String maxResults;

  /** Constructs a new Latitude URL from the given encoded URI. */
  public LatitudeUrl(String encodedUrl) {
    super(encodedUrl);
  }

  private static LatitudeUrl root() {
    return new LatitudeUrl("https://www.googleapis.com/latitude/v1");
  }

  public static LatitudeUrl forCurrentLocation() {
    LatitudeUrl result = root();
    result.pathParts.add("currentLocation");
    return result;
  }

  public static LatitudeUrl forLocation() {
    LatitudeUrl result = root();
    result.pathParts.add("location");
    return result;
  }

  public static LatitudeUrl forLocation(Long timestampMs) {
    LatitudeUrl result = forLocation();
    result.pathParts.add(timestampMs.toString());
    return result;
  }
}

使用法

このオブジェクトを使用して URL を構築し、パラメーター (@Key 注釈付きフィールド) を入力し、build() メソッドを実行してその文字列表現を取得します。

    LatitudeUrl latitudeUrl = LatitudeUrl.forLocation();
    latitudeUrl.maxResults="20";
    latitudeUrl.minTime="123";
    latitudeUrl.minTime="456";

    System.out.println(latitudeUrl.build());

出力:

https://www.googleapis.com/latitude/v1/location?max-results=20&min-time=456
于 2011-06-12T22:58:40.997 に答える
1

真剣に掘り下げた後、google-java-apiを使用してクエリパラメータを含める方法を見つけました。

これらのクエリパラメータのいずれかをURLに追加するには、次の手順を実行します。

基本的なCalendarUrlを作成した後、.put( "Key"、 "Value")を呼び出してクエリパラメーターを追加します。例えば:

CalendarUrl eventFeedUrl = CalendarUrl.forEventFeed("user@gmail.com", "private", "full");

  eventFeedUrl.put("start-min", "2011-06-01T00:00:00");
  eventFeedUrl.put("start-max", "2011-06-22T00:00:00");

グーグルのプロジェクトホームで、フィルタリングされていない「問題」のジャンクロードの真っ只中に埋められたスレッドに偶然出くわしました。gData apiを使用するためのドキュメントはたくさんありますが、google-java-apiについては何もありません。この単純なメソッド呼び出しを見つけるのに約2日かかりました。非常にイライラします。これを読んだ人が、この単純でありながら重要なタスクを実行する方法を見つけるために私が経験したことを経験しなかったことを願っています。より適切に文書化する必要があります。

于 2011-06-12T18:32:17.353 に答える