我搜索并尝试了很多开发使用网站内容的应用程序。我刚看到StackExchange应用程序,看起来我想开发我的应用程序。 Web和应用程序之间的区别在于:
浏览器:
应用
如您所见,浏览器和应用程序之间存在一些差异。 我希望有人知道如何创建这样的应用程序,因为经过几个小时的搜索后我才发现使用简单的WebView(只是浏览器的1:1)的解决方案,或者在应用程序中使用Javascript来删除一些内容(这实际上有点儿马车......)。
重复:关键是,我想获取网站的内容(在应用程序启动时)并将其放入我的应用程序中。
干杯。
答案 0 :(得分:1)
你想要做的是通过获取他们的HTML代码并使用某种形式的逻辑对其进行排序来刮掉有问题的网站 - 我为此推荐了xPath。然后你可以将这些数据实现到一些不错的原生界面中。
然而,您需要非常清楚所获得的数据并非总是以您想要的方式形成,因此您的所有算法都必须非常灵活。
过程可以切成这样的步骤
<强>更新强>
Bellow是一些示例代码,用于获取网站的一些数据,它实现了html-cleaner libary,您需要在项目中实现这一点。
class GetStationsClass extends AsyncTask<String, String, String> {
@Override
protected String doInBackground(String... params) {
HttpClient httpclient = new DefaultHttpClient();
httpclient.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
httpclient.getParams().setParameter(CoreProtocolPNames.HTTP_ELEMENT_CHARSET, "iso-8859-1");
HttpPost httppost = new HttpPost("http://ntlive.dk/rt/route?id=786");
httppost.setHeader("Accept-Charset", "iso-8859-1, unicode-1-1;q=0.8");
try {
// Add your data
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(3);
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs, "utf-8"));
// Execute HTTP Post Request
HttpResponse response = httpclient.execute(httppost);
int status = response.getStatusLine().getStatusCode();
String data = "";
if (status != HttpStatus.SC_OK) {
ByteArrayOutputStream ostream = new ByteArrayOutputStream();
response.getEntity().writeTo(ostream);
data = ostream.toString();
} else {
BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(),
"iso-8859-1"));
String line = null;
while ((line = reader.readLine()) != null) {
data += line;
}
XPath xpath = XPathFactory.newInstance().newXPath();
try {
Document document = readDocument(data);
NodeList nodes = (NodeList) xpath.evaluate("//*[@id=\"container\"]/ul/li", document,
XPathConstants.NODESET);
for (int i = 0; i < nodes.getLength(); i++) {
Node thisNode = nodes.item(i);
Log.v("",thisNode.getTextContent().trim);
}
} catch (XPathExpressionException e) {
e.printStackTrace();
}
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
//update user interface here
}
}
private Document readDocument(String content) {
Long timeStart = new Date().getTime();
TagNode tagNode = new HtmlCleaner().clean(content);
Document doc = null;
try {
doc = new DomSerializer(new CleanerProperties()).createDOM(tagNode);
return doc;
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return doc;
}
运行上面的代码
new getStationsClass.execute();