<Test> XiMaLaYa 新奇部分的添加


---------------------------------------之前的一些知识点:----------------------------------------------------
修改空间的布局:
首先每个推荐之间是有间隙的,
注意,包含的结构是这样的:activity_main.xml->fragment_home.xml->recommend_item.xml->album_item.xml
所以每个推荐之间的间隙,只要在recommend_item 里面修改添加marginTop的数值就可以了,还有给每个推荐修改背景色为白色
还有为了修改间隙之间的颜色修改fragment_home的背景色为灰色的。就可以了


还有 显示 的 title,一般都是如果超出了范围了 就是使用限制了 。
设置当TextView中的文字超过TextView的容量时,用省略号代替
只需要下边的设置:
 
textview.setSingleLine(); 
textview.setEllipsiz(TextUtils.TruncateAt.valueOf("END"));
 
在xml中设置如下:
 
android:singleLine="true"
android:ellipsize="end"


android:singleLine="true"
android:ellipsize="end"
---------------------------------------之前的一些知识点:----------------------------------------------------




+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
发现新奇:
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
由于RecyclerViewAdapter已经实现是了多布局的复用,那么现在要做的
1:首先做一个布局discovery_item.xml,这个里面 要绑定一个 discovery的一个变量。
2: 然后做一个discovery_columns.xml的布局文件,将上面的 discovery_item绑定到这个来。
3:将该布局添加到到HomeFfragment里面。




在写discovery_item.xml 的时候
注意 SimpleDraweeView 里面的设置:
app:placeholderImage="@mipmap/ic_launcher"
        app:imageURI="@{ Uri.parse( discovery.coverPath ) }"//靠!!!imageURI的i是小写的。
这里的面的最顶层的LinearLayout 可以不写


include的时候需要,导入这个layout里面的变量呢?
bind:user="@{user}"




注意 图片 这里 app:imageURI="@{ Uri.parse( discovery.coverPath  ?? ``) }"


++++++++++++++++++++++++++++
靠!!!imageURI的i是小写的。
++++++++++++++++++++++++++++


在discovery_item.xml的顶层Layout 里面添加:
android:layout_marginTop="2dp"
    android:background="@android:color/white"



现在的discovery_item.xml
-------------------------------------------------------------
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <data>
        <import type="android.net.Uri"/>
        <variable name="discovery" type="com.kodulf.ximalayating.entities.DiscoveryEntity"/>
    </data>
<LinearLayout
    android:layout_marginTop="2dp"
    android:background="@android:color/white"
    android:orientation="horizontal" >
    <com.facebook.drawee.view.SimpleDraweeView
        android:layout_width="40dp"
        android:layout_height="40dp"
        app:placeholderImage="@mipmap/ic_launcher"
        app:viewAspectRatio="1"
        app:imageURI="@{ Uri.parse( discovery.coverPath  ?? ``) }"
        >
    </com.facebook.drawee.view.SimpleDraweeView>
<LinearLayout
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:orientation="vertical">
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@{ discovery.title }">
    </TextView>
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@{ discovery.subtitle }">
    </TextView>
</LinearLayout>
</LinearLayout>
</layout>

-------------------------------------------------------------




discovery_columns.xml
--------------------------------------------------------------
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:bind="http://schemas.android.com/tools">
    <data>
        <variable
            name="discoveryColumns"
            type="com.kodulf.ximalayating.entities.DiscoveryColumns"/>

    </data>
    <LinearLayout android:orientation="vertical" android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
            <TextView
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                text="@{ discoveryColumns.title }"/>
        </LinearLayout>
<LinearLayout
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="wrap_content">
    <include
        layout="@layout/discovery_item"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        bind:discovery="@{ discoveryColumns.list[0] }"
    />
    <include
        layout="@layout/discovery_item"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        bind:discovery="@{ discoveryColumns.list[1] }"
        />
    <include
        layout="@layout/discovery_item"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        bind:discovery="@{ discoveryColumns.list[2] }"
        />
    <include
        layout="@layout/discovery_item"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        bind:discovery="@{ discoveryColumns.list[3] }"
        />

</LinearLayout>
    </LinearLayout>
</layout>

--------------------------------------------------------------
HomeFragment里面添加两句话:
map.put(DiscoveryColumns.class,new BindingAdapter.BindingTool(R.layout.discovery_columns,BR.discoveryColumns));
        
adapter.add(body.getDiscoveryColumns());

package com.kodulf.ximalayating.fragments;


import android.databinding.DataBindingUtil;
import android.databinding.ViewDataBinding;
import android.databinding.tool.reflection.Callable;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;

import com.kodulf.ximalayating.BR;
import com.kodulf.ximalayating.R;
import com.kodulf.ximalayating.adapters.BindingAdapter;
import com.kodulf.ximalayating.databinding.FragmentHomeBinding;
import com.kodulf.ximalayating.entities.DiscoveryColumns;
import com.kodulf.ximalayating.entities.DiscoveryEntity;
import com.kodulf.ximalayating.entities.HomeEntity;
import com.kodulf.ximalayating.entities.RecommendEntity;
import com.kodulf.ximalayating.utils.NetworkUtil;

import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.HashMap;

import retrofit2.Callback;
import retrofit2.Response;

/**
 * A simple {@link Fragment} subclass.
 */
public class HomeFragment extends Fragment implements Callback<HomeEntity> {


    private BindingAdapter adapter;

    public HomeFragment() {
        // Required empty public constructor
    }


    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        HashMap<Type,BindingAdapter.BindingTool> map = new HashMap<>();
        map.put(RecommendEntity.class,new BindingAdapter.BindingTool(R.layout.recommend_item, BR.recommend));
        map.put(DiscoveryColumns.class,new BindingAdapter.BindingTool(R.layout.discovery_columns,BR.discoveryColumns));
        adapter = new BindingAdapter(map, new ArrayList<>(), getContext());

        NetworkUtil.getService().getHome().enqueue(this);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
//        return inflater.inflate(R.layout.fragment_home, container, false);
        //初始化的时候需要修改了,不要上面的inflater了。
        FragmentHomeBinding binding = DataBindingUtil.inflate(inflater, R.layout.fragment_home, container, false);
        binding.homeRecycler.setAdapter(adapter);
        return binding.getRoot();
    }

    @Override
    public void onResponse(Response<HomeEntity> response) {
//        Toast.makeText(getContext(),"返回",Toast.LENGTH_LONG).show();
        HomeEntity body = response.body();
        adapter.add(body.getEditorRecommendAlbums());
        adapter.addAll(body.getHotRecommends().getList());
        adapter.add(body.getDiscoveryColumns());
    }

    @Override
    public void onFailure(Throwable t) {
        t.printStackTrace();
    }
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
import re import requests import parsel # 数据解析模块 def change_title(title): """处理文件名非法字符的方法""" pattern = re.compile(r"[\/\\\:\*\?\"\<\>\|]") # '/ \ : * ? " < > |' new_title = re.sub(pattern, "_", title) # 替换为下划线 return new_title for page in range(13, 33): print('---------------正在爬取第{}页的数据----------------'.format(page)) # 1.确定数据所在的链接地址(url) 逆向分析 网页性质(静态网页/动态网页) url = 'https://www.ximalaya.com/youshengshu/4256765/p{}/'.format(page) headers = { 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36'} # 2.通过代码发送url地址的请求 response = requests.get(url=url, headers=headers) html_data = response.text # print(html_data) # 3.解析数据(要的, 筛选不要的) 解析音频的 id值 selector = parsel.Selector(html_data) lis = selector.xpath('//div[@class="sound-list _is"]/ul/li') for li in lis: try: title = li.xpath('.//a/@title').get() + '.m4a' href = li.xpath('.//a/@href').get() # print(title, href) m4a_id = href.split('/')[-1] # print(href, m4a_id) # 发送指定id值json数据请求(src) json_url = 'https://www.ximalaya.com/revision/play/v1/audio?id={}&ptype=1'.format(m4a_id) json_data = requests.get(url=json_url, headers=headers).json() # print(json_data) # 提取音频地址 m4a_url = json_data['data']['src'] # print(m4a_url) # 请求音频数据 m4a_data = requests.get(url=m4a_url, headers=headers).content new_title = change_title(title) # print(new_title) # 4.数据持久化(保存) with open('video\\' + new_title, mode='wb') as f: f.write(m4a_data) print('保存完成:', title) except: pass
最新发布
06-01

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值