На сайте, который вы просматриваете, есть функция поиска, которую вы можете эмулировать, используя HttpClient и HttpPost, как показано в следующем примере.
Прежде всего, используйте HttpClient - в данном случае AndroidHttpClient,Мы имитируем User-Agent реального браузера на всякий случай:
mClient = AndroidHttpClient.newInstance(
"Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.24) Gecko/20111107 Ubuntu/10.04 (lucid) Firefox/3.6.24", this);
Затем - AsyncTask, который будет выполнять сетевую операцию:
class GetPlayerTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
String result = null;
String url = Uri.parse("http://www.rotoworld.com").buildUpon()
.appendEncodedPath("content/playersearch.aspx")
.appendQueryParameter("searchname", params[0] + " " + params[1])
.build().toString();
HttpPost post = new HttpPost(url);
post.addHeader("Referer", "http://www.rotoworld.com");
try {
List<NameValuePair> parameters = new ArrayList<NameValuePair>();
parameters.add(new BasicNameValuePair("ctl00$cp1$btnAdvancedSearch", "Search"));
parameters.add(new BasicNameValuePair("ctl00$cp1$radSportSearch", params[2].toUpperCase()));
parameters.add(new BasicNameValuePair("ctl00$cp1$tbFirstNameSearch", params[0]));
parameters.add(new BasicNameValuePair("ctl00$cp1$tbLastNameSearch", params[1]));
parameters.add(new BasicNameValuePair("ctl00$cp1$tbHeaderSearchBox", "LAST NAME, FIRST NAME"));
parameters.add(new BasicNameValuePair("ctl00$cp1$headlinesNFL$hideHeadlineSport", ""));
parameters.add(new BasicNameValuePair("ctl00$cp1$siteheader$hidpage", ""));
parameters.add(new BasicNameValuePair("__EVENTARGUMENT", ""));
parameters.add(new BasicNameValuePair("__EVENTTARGET", ""));
parameters.add(new BasicNameValuePair("__EVENTVALIDATION", "/wEWEALJp4KIBAKHlvL3BgLA+sClCQK5vLryBgKn1MPhBAK9kM36BQKj89HmAwLA+vrmBAKk7ayNDgKj85nnAwKU87XnAwKurM6nDAK++qLmBAKD2r2iBgKQ+47mAgK//t/aB6qbH1ovSUf6LkMO7LTmIW5EbRu5"));
parameters.add(new BasicNameValuePair("__VIEWSTATE", "/wEPDwUJMjg1NjcxOTA2D2QWAmYPZBYEAgEPZBYCAhwPFgIeBFRleHQF3AE8c2NyaXB0IGxhbmd1YWdlPSdqYXZhc2NyaXB0JyB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnIHNyYz0naHR0cDovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeS8xLjQuMi9qcXVlcnkubWluLmpzJz48L3NjcmlwdD48c2NyaXB0IGxhbmd1YWdlPSdqYXZhc2NyaXB0JyB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnIHNyYz0nL3psaWJzL2ZseW91dG5hdi5qcyc+PC9zY3JpcHQ+ZAIDD2QWAgIBD2QWAgIDD2QWBAIFD2QWBgIBDxYCHwAFDVRvcCBIZWFkbGluZXNkAgIPDxYCHgdWaXNpYmxlaGRkAgQPD2QPEBYBZhYBFgIeDlBhcmFtZXRlclZhbHVlZRYBZmRkAgsPZBYCAgEPFgIfAAUbQ2hhbXBpb25zaGlwIEV2ZW50cyBUaWNrZXRzZGRb2hpHPON4Q4VOuUHYhpgRZg0o4Q=="));
post.setEntity(new UrlEncodedFormEntity(parameters));
HttpResponse response = mClient.execute(post);
if (response.getStatusLine().getStatusCode() == 302) {
Header location = response.getFirstHeader("Location");
if (location != null) {
result = location.getValue();
}
}
} catch (IOException e) {
Log.e(TAG, "Unable perform request", e);
}
return result;
}
@Override
protected void onPostExecute(String result) {
// Call whatever method you want to notify your Activity
// that you've found the player in question
onPlayerFound(result);
}
}
BasicNameValuePair
s выше былипотратил 2-3 секунды на их поисковую страницу, используя FireBug.Ответом на «успешный поиск» является сообщение о перенаправлении (302), содержащее местоположение страницы игрока - то есть идентификатор, который вам необходим для загрузки изображения.
GetPlayerTask
будет использоваться следующим образом:
GetPlayerTask fetch = new GetPlayerTask();
// FirstName, LastName, Category (NBA/etc./etc.)
fetch.execute("Gerald", "Henderson", "nba");
Это вернет путь относительно www.rotoworld.com, например,
"/player/nba/1614/gerald-henderson"