public String toQueryString(String url) { String datespec = STAR; String exactDateTimestamp = getEmptyStringIfNull(wbRequest.get(WaybackRequest.REQUEST_EXACT_DATE)); String startTimestamp = getEmptyStringIfNull(wbRequest.getStartTimestamp()); String endTimestamp = getEmptyStringIfNull(wbRequest.getEndTimestamp()); if (!exactDateTimestamp.isEmpty()) { datespec = exactDateTimestamp + STAR; } else if (!startTimestamp.isEmpty() || !endTimestamp.isEmpty()) { datespec = String.format("%s-%s%s", startTimestamp, endTimestamp, STAR); } return toString(datespec, url); }
public String toQueryString(String url) { String datespec = STAR; String exactDateTimestamp = getEmptyStringIfNull(wbRequest.get(WaybackRequest.REQUEST_EXACT_DATE)); String startTimestamp = getEmptyStringIfNull(wbRequest.getStartTimestamp()); String endTimestamp = getEmptyStringIfNull(wbRequest.getEndTimestamp()); if (!exactDateTimestamp.isEmpty()) { datespec = exactDateTimestamp + STAR; } else if (!startTimestamp.isEmpty() || !endTimestamp.isEmpty()) { datespec = String.format("%s-%s%s", startTimestamp, endTimestamp, STAR); } return toString(datespec, url); }
/** * Build a self-referencing URL that will perform a query for all copies * of the given URL (plain, clean URL version). * @param url URL to search for copies of * @return String URL for querying captures of * @version 1.8.1 */ public String makePlainCaptureQueryUrl(String url) { // TOOD: want "2014*" instead of "20140101000000-20141231115959*" return wbRequest.getAccessPoint().makeCaptureQueryUrl(url, wbRequest.getStartTimestamp(), wbRequest.getEndTimestamp()); }
/** * Build a self-referencing URL that will perform a query for all copies * of the given URL (plain, clean URL version). * @param url URL to search for copies of * @return String URL for querying captures of * @version 1.8.1 */ public String makePlainCaptureQueryUrl(String url) { // TOOD: want "2014*" instead of "20140101000000-20141231115959*" return wbRequest.getAccessPoint().makeCaptureQueryUrl(url, wbRequest.getStartTimestamp(), wbRequest.getEndTimestamp()); }
protected WaybackRequest handleDatelessRequest(AccessPoint accessPoint, String requestPath, Date mementoDate) throws BetterRequestException { // String nowTS = Timestamp.currentTimestamp().getDateStr(); // String newUrl = accessPoint.getUriConverter().makeReplayURI(nowTS, requestPath); // throw new BetterRequestException(newUrl); WaybackRequest wbRequest = new WaybackRequest(); if (wbRequest.getStartTimestamp() == null) { wbRequest.setStartTimestamp(getEarliestTimestamp()); } if (wbRequest.getEndTimestamp() == null) { wbRequest.setEndTimestamp(getLatestTimestamp()); } if (mementoDate == null) { mementoDate = new Date(); wbRequest.setBestLatestReplayRequest(); } wbRequest.setReplayDate(mementoDate); wbRequest.setAnchorDate(mementoDate); wbRequest.setReplayRequest(); wbRequest.setRequestUrl(requestPath); return wbRequest; } }
protected WaybackRequest handleDatelessRequest(AccessPoint accessPoint, String requestPath, Date mementoDate) throws BetterRequestException { // String nowTS = Timestamp.currentTimestamp().getDateStr(); // String newUrl = accessPoint.getUriConverter().makeReplayURI(nowTS, requestPath); // throw new BetterRequestException(newUrl); WaybackRequest wbRequest = new WaybackRequest(); if (wbRequest.getStartTimestamp() == null) { wbRequest.setStartTimestamp(getEarliestTimestamp()); } if (wbRequest.getEndTimestamp() == null) { wbRequest.setEndTimestamp(getLatestTimestamp()); } if (mementoDate == null) { mementoDate = new Date(); wbRequest.setBestLatestReplayRequest(); } wbRequest.setReplayDate(mementoDate); wbRequest.setAnchorDate(mementoDate); wbRequest.setReplayRequest(); wbRequest.setRequestUrl(requestPath); return wbRequest; } }
endDateStr = Timestamp.latestTimestamp().getDateStr(); String startDateStr = wbRequest.getStartTimestamp(); if (startDateStr == null || startDateStr.length() == 0) { startDateStr = Timestamp.earliestTimestamp().getDateStr();
public void testReplayRequestParser() throws Exception { ReplayRequestParser parser = new ReplayRequestParser(brp); // note AccessPoint arg is unused { WaybackRequest wbr = parser.parse("20100101000000/http://www.yahoo.com/", null); assertEquals("replayTimestamp", "20100101000000", wbr.getReplayTimestamp()); assertNull("startTimestamp", wbr.getStartTimestamp()); // endTimestamp is current timestamp assertNotNull("endTimestamp", wbr.getEndTimestamp()); } // old Alexa ARCs has 12-digits dates - padded with "00" -> same as prev case { WaybackRequest wbr = parser.parse("201001010000/http://www.yahoo.com/", null); assertEquals("replayTimestamp", "20100101000000", wbr.getReplayTimestamp()); assertNull("startTimestamp", wbr.getStartTimestamp()); // endTimestamp is current timestamp assertNotNull("endTimestamp", wbr.getEndTimestamp()); } { WaybackRequest wbr = parser.parse("20100101/http://www.yahoo.com/", null); assertEquals("replayTimestamp", "20100101235959", wbr.getReplayTimestamp()); assertEquals("startTimestamp", "20100101000000", wbr.getStartTimestamp()); assertEquals("endTimestamp", "20100101235959", wbr.getEndTimestamp()); } }
/** * test of {@link PathPrefixDateRangeQueryRequestParser}. * <p>explicit timestamp range and trailing "*" in URL. * this is a URL-query request, timestamp range becomes * start and end timestamp.</p> * <p>timerange without "*" is not recognized. it could be.</p> */ public void testPathPrefixDateRange() throws Exception { { WaybackRequest wbr1 = parse("/web/20100101-20100531*/http://www.yahoo.com/*"); assertNotNull(wbr1); assertTrue(wbr1.isUrlQueryRequest()); assertEquals("20100101000000", wbr1.getStartTimestamp()); assertEquals("20100531235959", wbr1.getEndTimestamp()); assertEquals("http://www.yahoo.com/", wbr1.getRequestUrl()); } // TODO: date range without "*" }
/** * test for {@link PathDateRangeQueryRequestParser}, %-encoded version. * @throws Exception */ public void testPathDateRangeEncoded() throws Exception { WaybackRequest wbr1 = parse("/web/20100101000000-20100630235959%2A/http://www.yahoo.com/"); assertNotNull(wbr1); assertTrue(wbr1.isCaptureQueryRequest()); assertEquals("20100101000000", wbr1.getStartTimestamp()); assertEquals("20100630235959", wbr1.getEndTimestamp()); // assertEquals("20100630235959", wbr1.getReplayTimestamp()); assertEquals(null, wbr1.getReplayTimestamp()); assertEquals("http://www.yahoo.com/", wbr1.getRequestUrl()); }
/** * test of {@link PathPrefixDatePrefixQueryRequestParser}. * <p>%-encoded timestamp.</p> * @throws Exception */ public void testPathPrefixDatePrefixEncoded() throws Exception { { WaybackRequest wbr = parse("/web/2010%2A/http://www.yahoo.com/*"); assertNotNull(wbr); assertTrue(wbr.isUrlQueryRequest()); assertEquals("20100101000000", wbr.getStartTimestamp()); assertEquals("20101231235959", wbr.getEndTimestamp()); assertEquals("http://www.yahoo.com/", wbr.getRequestUrl()); } // negative case - %2A doesn't make it path-prefix. { WaybackRequest wbr = parse("/web/2010%2A/http://www.yahoo.com/%2A"); assertNotNull(wbr); assertTrue(wbr.isCaptureQueryRequest()); assertEquals("20100101000000", wbr.getStartTimestamp()); assertEquals("20101231235959", wbr.getEndTimestamp()); assertEquals("http://www.yahoo.com/%2A", wbr.getRequestUrl()); } }
/** * test of {@link PathPrefixDateRangeQueryRequestParser}, * %-encoded version. * @throws Exception */ public void testPathPrefixdateRangeEncoded() throws Exception { { WaybackRequest wbr = parse("/web/20100101%2D20100531%2A/http://www.yahoo.com/*"); assertNotNull(wbr); assertTrue(wbr.isUrlQueryRequest()); assertEquals("20100101000000", wbr.getStartTimestamp()); assertEquals("20100531235959", wbr.getEndTimestamp()); assertEquals("http://www.yahoo.com/", wbr.getRequestUrl()); } { // URL part shall not be URL-decoded WaybackRequest wbr = parse("/web/20100101%2D20100531%2A/http%3a//www.yahoo.com/%2A"); assertNotNull(wbr); assertTrue(wbr.isCaptureQueryRequest()); assertEquals("20100101000000", wbr.getStartTimestamp()); assertEquals("20100531235959", wbr.getEndTimestamp()); // WaybackRequet#setRequestUrl() prepends "http://" if urlStr does // not begin with http:// assertEquals("http://http%3a//www.yahoo.com/%2A", wbr.getRequestUrl()); } }
/** * Another test of {@link PathDatePrefixQueryRequestParser}: * URL is recognized even when "{@code *}" is %-encoded. * <p>this is a desired behavior to be implemented (assertion is disabled). * see issue <a href="https://webarchive.jira.com/browse/WWM-110">WWM-110</a></p> * @throws Exception */ public void testDatePrefixEncoded() throws Exception { WaybackRequest wbr1 = parse("/web/20100101%2A/http://www.yahoo.com/?p=%2A"); assertNotNull(wbr1); assertTrue(wbr1.isCaptureQueryRequest()); assertEquals("20100101000000", wbr1.getStartTimestamp()); assertEquals("20100101235959", wbr1.getEndTimestamp()); assertEquals("20100101235959", wbr1.getReplayTimestamp()); assertEquals("http://www.yahoo.com/?p=%2A", wbr1.getRequestUrl()); WaybackRequest wbr2 = parse("/web/%2A/http://www.yahoo.com/"); assertNotNull(wbr2); assertTrue(wbr2.isCaptureQueryRequest()); assertEquals(EXPECTED_START_TIMESTAMP, wbr2.getStartTimestamp()); assertEquals(EXPECTED_END_TIMESTAMP, wbr2.getEndTimestamp()); assertEquals(null, wbr2.getReplayTimestamp()); }
/** * test of {@link PathDatePreofixQueryRequestParser}. */ public void testDatePrefix() throws Exception { // less-than-14-digit timestamp with "*": narrowed time range, highlight // the latest within the range. WaybackRequest wbr1 = parse("/web/20100101*/http://www.yahoo.com/?p=2"); assertNotNull(wbr1); assertTrue(wbr1.isCaptureQueryRequest()); assertEquals("20100101000000", wbr1.getStartTimestamp()); assertEquals("20100101235959", wbr1.getEndTimestamp()); assertEquals("20100101235959", wbr1.getReplayTimestamp()); assertEquals("http://www.yahoo.com/?p=2", wbr1.getRequestUrl()); // just "*": entire time range, replay the latest. WaybackRequest wbr2 = parse("/web/*/http://www.yahoo.com/"); assertNotNull(wbr2); assertTrue(wbr2.isCaptureQueryRequest()); assertEquals(EXPECTED_START_TIMESTAMP, wbr2.getStartTimestamp()); assertEquals(EXPECTED_END_TIMESTAMP, wbr2.getEndTimestamp()); assertEquals(null, wbr2.getReplayTimestamp()); // full 14-digit timestamp with "*": entire time range, highlight the // closest to the specified date. WaybackRequest wbr3 = parse("/web/20100101000000*/http://www.yahoo.com/"); assertNotNull(wbr3); assertTrue(wbr3.isCaptureQueryRequest()); assertEquals(EXPECTED_START_TIMESTAMP, wbr3.getStartTimestamp()); assertEquals(EXPECTED_END_TIMESTAMP, wbr3.getEndTimestamp()); assertEquals("20100101000000", wbr3.getReplayTimestamp()); }
protected void checkPathDateless(WaybackRequest wbr, String requestUrl) { assertNotNull(wbr); assertTrue(wbr.isReplayRequest()); assertTrue(wbr.isBestLatestReplayRequest()); assertEquals(EXPECTED_START_TIMESTAMP, wbr.getStartTimestamp()); assertEquals(EXPECTED_END_TIMESTAMP, wbr.getEndTimestamp()); assertEquals(requestUrl, wbr.getRequestUrl()); assertNotNull(wbr.getReplayDate()); assertNotNull(wbr.getAnchorDate()); }
/** * test of {@link PathPrefixDatePrefixQueryRequestParser}. * <p>this is a URL query with (optional) single timestamp date range. * timestamp, if non-empty, becomes start and end. * </p> */ public void testPathPrefixDatePrefix() throws Exception { WaybackRequest wbr1 = parse("/web/2010*/http://www.yahoo.com/*"); assertNotNull(wbr1); assertTrue(wbr1.isUrlQueryRequest()); assertEquals("20100101000000", wbr1.getStartTimestamp()); assertEquals("20101231235959", wbr1.getEndTimestamp()); // does not set replayTimestamp, but it is not a required behavior. assertEquals("http://www.yahoo.com/", wbr1.getRequestUrl()); WaybackRequest wbr2 = parse("/web/*/http://www.yahoo.com/*"); assertNotNull(wbr2); assertTrue(wbr2.isUrlQueryRequest()); assertEquals(EXPECTED_START_TIMESTAMP, wbr2.getStartTimestamp()); assertEquals(null, wbr2.getEndTimestamp()); // does not set replayTimestamp, but it is not a required behavior. assertEquals("http://www.yahoo.com/", wbr2.getRequestUrl()); // timestamp is up to 13 digits. 14-digit timestamp results in null (-> 404). // TODO: there'd be a nicer way. WaybackRequest wbr3 = parse("/web/20130101000000*/http://www.yahoo.com/*"); assertNull(wbr3); } /**
assertNotNull(wbr1); assertTrue(wbr1.isCaptureQueryRequest()); assertEquals("20100101000000", wbr1.getStartTimestamp()); assertEquals("20100630235959", wbr1.getEndTimestamp()); assertNotNull(wbr2); assertTrue(wbr1.isCaptureQueryRequest()); assertEquals("20100101000000", wbr2.getStartTimestamp()); assertEquals("20141231235959", wbr2.getEndTimestamp());
assertTrue(wbr.isMementoTimegate()); assertFalse(wbr.isBestLatestReplayRequest()); assertEquals(EXPECTED_START_TIMESTAMP, wbr.getStartTimestamp()); assertEquals(EXPECTED_END_TIMESTAMP, wbr.getEndTimestamp()); assertEquals(date, wbr.getReplayDate()); assertTrue(wbr.isReplayRequest()); assertFalse(wbr.isBestLatestReplayRequest()); assertEquals(EXPECTED_START_TIMESTAMP, wbr.getStartTimestamp()); assertEquals(EXPECTED_END_TIMESTAMP, wbr.getEndTimestamp()); assertEquals(date, wbr.getReplayDate()); assertTrue(wbr.isReplayRequest()); assertTrue(wbr.isBestLatestReplayRequest()); assertEquals(EXPECTED_START_TIMESTAMP, wbr.getStartTimestamp()); assertEquals(EXPECTED_END_TIMESTAMP, wbr.getEndTimestamp());
startDate = request.getStartTimestamp(); if(startDate == null) { startDate = Timestamp.earliestTimestamp().getDateStr();
startDate = request.getStartTimestamp(); if(startDate == null) { startDate = Timestamp.earliestTimestamp().getDateStr();