从 URL 的网站加载内容(图片、标题等)
Load content (image, title etc.) from URL of Website
假设我有一个 URL 比如 this. Now I am trying to show the content of the URL on my app at a glance. Like the below image:
那我应该怎么走。请帮助我。
您需要从 Web URL 下载内容。然后你必须从加载的页面源解析你想要的值。
所以,步骤基本上是:
1. 从 Web URL 加载 Html
2. 从 html
解析你的值
现在是从网络加载 html 的步骤 URL。
static String TAG = "WebRequest";
void getWebAsync(String urlString) {
AsyncHttpClient androidClient = new AsyncHttpClient();
androidClient.get(urlString, new TextHttpResponseHandler() {
@Override
public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {
Log.e(TAG, "responseString: " + responseString);
}
@Override
public void onSuccess(int statusCode, Header[] headers, String responseToken) {
Log.e(TAG, "Client token: " + responseToken);
handleHtml(responseToken);
}
});
}
然后你必须处理接收到的html源。
void handleHtml(String htmlCode) {
WebModel webModel = extractAllText(htmlCode);
Log.e("PARSED_MODEL", "Model: " + webModel.toString());
if (webModel.getTilte() != null) {
titleTV.setText(webModel.getTilte());
}
if (webModel.getMainIamgeURL() != null) {
Picasso.with(this)
.load(webModel.getMainIamgeURL())
.error(R.mipmap.ic_launcher)
.into(imageView);
} else {
imageView.setImageResource(R.mipmap.ic_launcher);
}
}
public WebModel extractAllText(String htmlText){
Source source = new Source(htmlText);
String strData = "";
WebModel webModel = new WebModel();
List<Element> elements;
elements = source.getAllElements("title");
String title = elements.get(0).getContent().toString();
webModel.setTilte(title);
elements = source.getAllElements("meta");
for(Element element : elements )
{
final String id = element.getAttributeValue("property"); // Get Attribute 'id'
if( id != null && id.equals("og:image")){
strData = element.getAttributeValue("content");
webModel.setMainIamgeURL(strData);
break;
}
}
return webModel;
}
public class WebModel {
String tilte;
String mainIamgeURL;
public String getTilte() {
return tilte;
}
public String getMainIamgeURL() {
return mainIamgeURL;
}
public void setTilte(String tilte) {
this.tilte = tilte;
}
public void setMainIamgeURL(String mainIamgeURL) {
this.mainIamgeURL = mainIamgeURL;
}
}
这里使用了两个库:
1. jericho-html-3.4.jar
2. com.loopj.android:android-async-http:1.4.9
最终您的结果将如下所示:
假设我有一个 URL 比如 this. Now I am trying to show the content of the URL on my app at a glance. Like the below image:
那我应该怎么走。请帮助我。
您需要从 Web URL 下载内容。然后你必须从加载的页面源解析你想要的值。
所以,步骤基本上是: 1. 从 Web URL 加载 Html 2. 从 html
解析你的值现在是从网络加载 html 的步骤 URL。
static String TAG = "WebRequest";
void getWebAsync(String urlString) {
AsyncHttpClient androidClient = new AsyncHttpClient();
androidClient.get(urlString, new TextHttpResponseHandler() {
@Override
public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) {
Log.e(TAG, "responseString: " + responseString);
}
@Override
public void onSuccess(int statusCode, Header[] headers, String responseToken) {
Log.e(TAG, "Client token: " + responseToken);
handleHtml(responseToken);
}
});
}
然后你必须处理接收到的html源。
void handleHtml(String htmlCode) {
WebModel webModel = extractAllText(htmlCode);
Log.e("PARSED_MODEL", "Model: " + webModel.toString());
if (webModel.getTilte() != null) {
titleTV.setText(webModel.getTilte());
}
if (webModel.getMainIamgeURL() != null) {
Picasso.with(this)
.load(webModel.getMainIamgeURL())
.error(R.mipmap.ic_launcher)
.into(imageView);
} else {
imageView.setImageResource(R.mipmap.ic_launcher);
}
}
public WebModel extractAllText(String htmlText){
Source source = new Source(htmlText);
String strData = "";
WebModel webModel = new WebModel();
List<Element> elements;
elements = source.getAllElements("title");
String title = elements.get(0).getContent().toString();
webModel.setTilte(title);
elements = source.getAllElements("meta");
for(Element element : elements )
{
final String id = element.getAttributeValue("property"); // Get Attribute 'id'
if( id != null && id.equals("og:image")){
strData = element.getAttributeValue("content");
webModel.setMainIamgeURL(strData);
break;
}
}
return webModel;
}
public class WebModel {
String tilte;
String mainIamgeURL;
public String getTilte() {
return tilte;
}
public String getMainIamgeURL() {
return mainIamgeURL;
}
public void setTilte(String tilte) {
this.tilte = tilte;
}
public void setMainIamgeURL(String mainIamgeURL) {
this.mainIamgeURL = mainIamgeURL;
}
}
这里使用了两个库: 1. jericho-html-3.4.jar 2. com.loopj.android:android-async-http:1.4.9
最终您的结果将如下所示: