jsoup是一个强大的可以将网页html数据进行解析,这样没有API接口的情况下,也可以获取数据了。具体的用法,可取参照jsoup官方文档。
以下是使用jsoup的简单实例:
package cn.sharesdk.demo;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.view.animation.AccelerateDecelerateInterpolator;
import android.widget.ListView;
import android.widget.ProgressBar;
import com.zhy.adapter.recyclerview.wrapper.LoadMoreWrapper;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import cn.sharesdk.framework.ShareSDK;
import cn.sharesdk.onekeyshare.OnekeyShare;
public class MainActivity extends AppCompatActivity {
String url = "http://www.qiushibaike.com/8hr/page/";
private int pageNum = 1;
// private List<DataEntity> mDatas = new ArrayList<>();
private List<BaseEntity> mDatas = new ArrayList<>();
private SwipeRefreshLayout mSwipe;
private ListView mListView;
private ProgressDialog mDialog;
private MyAdapter mAdapter;
private RecyclerView mRecyclerView;
private RvAdapter rvAdapter;
private LoadMoreWrapper mLoadMoreWrapper;
private ProgressBar mProgressBar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ShareSDK.initSDK(this);
setContentView(R.layout.activity_main);
initView();
initData();
initListener();
}
@Override
protected void onDestroy() {
super.onDestroy();
ShareSDK.stopSDK(this);
}
private void initListener() {
mSwipe.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
mDatas.clear();
pageNum = 1;
initData();
}
});
}
private void initView() {
mSwipe = (SwipeRefreshLayout) findViewById(R.id.swipe);
// mListView = (ListView) findViewById(R.id.listView);
// mListView.setDivider(null);
// mAdapter = new MyAdapter(this, mDatas);
// mAdapter.openAnimation(new ScaleAnimator());
// mListView.setAdapter(mAdapter);
mRecyclerView = (RecyclerView) findViewById(R.id.rv);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
rvAdapter = new RvAdapter(this, mDatas);
rvAdapter.openAnimation(new ScaleAnimator());
mLoadMoreWrapper = new LoadMoreWrapper(rvAdapter);
if (mProgressBar == null)
mProgressBar = new ProgressBar(this);
mProgressBar.setInterpolator(new AccelerateDecelerateInterpolator());
isShowLoadMore();
mLoadMoreWrapper.setOnLoadMoreListener(new LoadMoreWrapper.OnLoadMoreListener() {
@Override
public void onLoadMoreRequested() {
pageNum++;
initData();
}
});
mRecyclerView.setAdapter(mLoadMoreWrapper);
}
private void isShowLoadMore() {
if (mDatas.size() > 0) mLoadMoreWrapper.setLoadMoreView(mProgressBar);
}
public void updateView() {
isShowLoadMore();
mLoadMoreWrapper.notifyDataSetChanged();
mSwipe.setRefreshing(false);
}
private void initData() {
new AsyncTask<String,Void,List<BaseEntity>>() {
@Override
protected List<BaseEntity> doInBackground(String... params) {
return handleData(params);
}
@Override
protected void onPreExecute() {
super.onPreExecute();
// mSwipe.setRefreshing(true);
if (mDialog == null) {
mDialog = new ProgressDialog(MainActivity.this);
mDialog.setTitle("加载中...");
mDialog.show();
}
}
@Override
protected void onPostExecute(List<BaseEntity> dataEntities) {
if (mDialog != null) {
mDialog.dismiss();
}
// mDatas.clear();
mDatas.addAll(dataEntities);
updateView();
}
}.execute(new String[]{url});
}
private List<BaseEntity> handleData(String[] params) {
List<BaseEntity> dataEntities = new ArrayList<>();
String url = params[0];
try {
Document document = Jsoup
.connect(url + pageNum + "/")
.get();
Elements elements = document.select("a.contentHerf");
Elements elements_author = document.select("div.author.clearfix");
Elements elements_stats = document.select("div.stats");
// Log.d("HTML内容","HTML内容:" + elements.toString());
for (int j = 0; j < elements.size(); j++) {
DataEntity dataEntity = new DataEntity();
Element element = elements.get(j);
Element element_author = elements_author.get(j);
Element element_stats = elements_stats.get(j);
Elements herefs = element_author.select("a[href]");
Element level_women = element_author
.select("div.articleGender.womenIcon")
.first();
Element level_man = element_author
.select("div.articleGender.manIcon")
.first();
Elements numbers = element_stats.select("i.number");
if (numbers != null && numbers.size() >= 2) {
Log.d("HTML内容", "好笑数:" + numbers
.get(0)
.text());
Log.d("HTML内容", "评论数:" + numbers
.get(1)
.text());
dataEntity.setFunnyNum(numbers
.get(0)
.text());
dataEntity.setCommentNum(numbers
.get(1)
.text());
}
Element href_comment = element_stats
.select("a[href]")
.first();
String hrefComment = null;
if (href_comment != null) {
hrefComment = href_comment.attr("href");
}
Log.d("HTML内容", "评论链接:" + "http://www.qiushibaike.com/8hr/page/" + pageNum + hrefComment);
dataEntity.setCommentLink("http://www.qiushibaike.com/8hr/page/" + pageNum + hrefComment);
for (int k = 0; k < herefs.size(); k++) {
Element herefElement = herefs.get(k);
String href = herefElement.attr("href");
Log.d("HTML内容", "标题头链接:" + href);
dataEntity.setTitleLink("http://www.qiushibaike.com/8hr/page/" + pageNum + href);
Element img = herefElement
.select("img")
.first();
String title = herefElement.attr("title");
if (TextUtils.isEmpty(title)) {
String src = img.attr("src");
Log.d("HTML内容", "标题头图片:" + src);
dataEntity.setTitleIcon(src);
} else {
Log.d("HTML内容", "标题头标题:" + title);
dataEntity.setTitleName(title);
}
}
String level = null;
if (level_women != null) {
Log.d("HTML内容", "标题头等级:women" + level_women.text());
dataEntity.setSex("0"); //设置性别,女为0,男为1
level = level_women.text();
} else if (level_man != null) {
Log.d("HTML内容", "标题头等级:man" + level_man.text());
dataEntity.setSex("1");
level = level_man.text();
}
dataEntity.setLevel(level);
Log.d("HTML内容", "标题:" + element.text());
dataEntity.setContent(element.text());
// Log.d("HTML内容","标题头:" + element_author.text());
String href = element.attr("href");
// Log.d("HTML内容","详情链接:" + href);
Document detail_Document = Jsoup
.connect("http://www.qiushibaike.com" + href)
.get();
Elements text_detail = detail_Document.select(".content");
// Log.d("HTML内容","详情内容:" + text_detail.text());
Elements pic_detail = text_detail.select(".thumb img[src$=jpg]");
if (!pic_detail.isEmpty()) {
String src = pic_detail.attr("src");
// Log.d("HTML内容","详情图片:" + src);
} else {
// Log.d("HTML内容","详情图片:" + "no");
}
dataEntities.add(dataEntity);
}
} catch (IOException e) {
e.printStackTrace();
}
return dataEntities;
}
public void click(View view) {
OnekeyShare onekeyShare = new OnekeyShare();
onekeyShare.setTitle("趣分享");
onekeyShare.setText("我为技术带盐,我骄傲,我自豪");
onekeyShare.setImageUrl("http://7sby7r.com1.z0.glb.clouddn.com/CYSJ_02.jpg");
onekeyShare.setTitleUrl("http://wwww.baidu.com");
onekeyShare.show(MainActivity.this);
// Intent intent = new Intent(Intent.ACTION_SEND);
// intent.setType("text/plain");
// intent.putExtra(Intent.EXTRA_SUBJECT, "我为技术带盐,我骄傲,我自豪");
// intent.putExtra(Intent.EXTRA_TEXT, getString(R.string.share_contents, "趣分享", "http://wwww.baidu.com"));
// startActivity(Intent.createChooser(intent, getTitle()));
}
}