使用jsou代替API获取数据
来源:互联网 发布:说明域名注册的流程 编辑:程序博客网 时间:2024/06/07 02:12
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,男为1level = 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())); }}
0 0
- 使用jsou代替API获取数据
- http代替ajax获取数据
- 使用zabbix api获取最近告警数据
- mock数据始终获取不到,获取API,使用vuex
- Jsou简介
- 如何使用 Yahoo! Finance stock API 获取股票数据
- 如何使用 Yahoo! Finance stock API 获取股票数据
- IOS 使用百度地图api 获取gps定位数据
- IOS 使用百度地图api 获取gps定位数据
- IOS 使用百度地图api 获取gps定位数据
- Zookeeper实例Curator API-使用Curator获取数据内容
- 通过api使用HttpURLConnection 获取返回天气数据。
- 使用python通过聚币API获取价格数据
- 使用豆瓣书籍API获取json类型的数据
- 关于使用java获取百度统计Api数据
- 提交数据使用json代替xml
- 使用EventBus代替startActivityForResult向上传递数据
- 数据查询使用数字代替字段排序
- 解决大数据方面的问题
- 64位Centos6.5使用源码安装Python3.5
- C语言实现求复数的模,开启面向对象编程之路
- 如何生成一维条码图片
- 【Linux学习】epoll详解
- 使用jsou代替API获取数据
- NodeJS的安装以及Less编译器的安装调用
- win10界面僵卡,原来是这样原因
- 170222
- table设置列宽度
- 17 multicast示例
- Android sdk 更新,使用腾讯服务器
- Android-AlarmManager
- 2017-01-22 进入高并发世界之多线程编程案例详解