從0開始寫一個NBA賽事直播新聞小程序+后臺接口數(shù)據(jù)

寫在前面的一段話

關(guān)于NBA亩进、基于深刻的莫過于高中時代的归薛,買籃球先鋒報、用手機(jī)2G網(wǎng)絡(luò)和同學(xué)湊在一起看文字直播习贫、還生怕班主任老師發(fā)現(xiàn)千元,
印象中第一次了解NBA是在2006年的英語書上幸海,有一頁上面是所有球隊的logo以及名字、那時開始慢慢的了解籃球袜硫、了解到了休斯頓火箭隊大姚挡篓、
從此對火箭隊情有獨鐘瞻凤、時至今日依然對那支22連勝的火箭有太多感情、時至今日綠軍三巨頭肝集、鄧肯蛛壳、蝸殼都已經(jīng)退役了,ohohoh好像有點跑題了衙荐,還是回到主題、記錄花了幾天時間寫的這個小程序

話不多少先上源碼地址
小程序GitHub地址: https://github.com/ecitlm/wx-nba
后端接口API地址:可先參照 https://ecitlm.github.io/TP5_Splider/#/?id=tp5_splider
項目下面的 controller 下的Nba.php類

部分界面效果體驗

image
image

關(guān)于接口API

接口來源是分析騰*體育H5端 的接口,使用php對接口進(jìn)行抓取整理讹俊、切對接口進(jìn)行了簽名校驗,已經(jīng)實現(xiàn)厕倍,但沒有用上小程序之中通過贩疙,接口整理一開始使用的是ThinkPHP5對接口統(tǒng)一整理的这溅、后面使用PhalAPi對接口文檔進(jìn)行了再次的整理,整理的接口有以下邪乍、通過以下接口數(shù)據(jù)完成一個簡單的大氣的NBA小程序的開發(fā)对竣、目前小程序正處于上架申請中否纬。

  • 每日賽事直播列表接口
  • 球賽直播實時詳情接口
  • 實時數(shù)據(jù)統(tǒng)計接口
  • 球隊進(jìn)本信息接口
  • 球隊球員陣容名單接口
  • 球員基本信息賽季數(shù)據(jù)接口
  • 30只球隊排名數(shù)據(jù)接口
  • 籃球快訊新聞列表接口
  • 新聞詳情接口
  • 新聞評論數(shù)據(jù)接口
    在線接口系統(tǒng)地址 https://wxapp.it919.cn/wx/listAllApis.php
    圖片

小程序界面

界面整體有十幾個临燃、包含以上接口對應(yīng)的UI界面烙心、以下界面屬于應(yīng)用的截圖界面

image
image

image
image

image
image

![](https://user-gold-cdn.xitu.io/2017/11/3/6e5575af9cdfe080304e7239cff40e89

項目目錄結(jié)構(gòu)

項目目錄結(jié)構(gòu)如下

image

網(wǎng)絡(luò)請求的封裝

網(wǎng)絡(luò)請求使用小程序的 wx.request+ promise+bluebird 對接口請求方法進(jìn)行封裝,一些列出的代碼屬于項目的核心代碼
utils目錄下的fetch.js文件所對應(yīng)的方法

const Promise = require("./bluebird"); //為了兼容問題
/**
 * 網(wǎng)絡(luò)請求API接口
 * @param  {String} api    api 根地址
 * @param  {String} path   請求路徑
 * @param  {Objece} params 參數(shù)
 */
module.exports = function(api, path, params) {
    wx.showLoading({
        title: "加載中"
    });
    console.log(`${api}/${path}`);
    console.log(params);
    return new Promise((resolve, reject) => {
        wx.request({
            url: `${api}/${path}`,
            data: Object.assign({}, params), //如果這里需要合并簽名時間戳參數(shù)時候可以這么寫
            header: { "Content-Type": "json" },
            success: function(res) {
                resolve(res);
                wx.hideLoading();
            },
            fail: function(err) {
                wx.hideLoading();
                reject(err);
            }
        });
    });
};

所有接口的請求放在api.js之中

const fetch = require("./fetch");
const API_DOMAIN = "https://api.xxx.cn/api";

/**
 * @param  {String} 接口地址   
 * @param  {Objece} params 接口參數(shù)參數(shù)
 */
function fetchApi(api, params) {
    return fetch(API_DOMAIN, api, params);
}

//NBA比賽直播
function nab_schedule(params) {
    return fetchApi("Nba/schedule", params).then(res => res.data);
}

//直播室信息
function live_detail(params) {
    return fetchApi("Nba/live_detail", params).then(res => res.data);
}

//直播內(nèi)容
function live_content(params) {
    return fetchApi("Nba/live_content", params).then(res => res.data);
}

//球員技術(shù)統(tǒng)計
function technical_statistics(params) {
    return fetchApi("Nba/technical_statistics", params).then(res => res.data);
}
//球員詳情
function player_detail(params) {
    return fetchApi("Nba/player_detail", params).then(res => res.data);
}

//聯(lián)盟排名
function team_rank(params) {
    return fetchApi("Nba/team_rank", params).then(res => res.data);
}

//球隊信息
function team_info(params) {
    return fetchApi("Nba/team_info", params).then(res => res.data);
}

//球隊陣容
function Lineup(params) {
    return fetchApi("Nba/Lineup", params).then(res => res.data);
}

//新聞詳情
function news_info(params) {
    return fetchApi("Nba/news_info", params).then(res => res.data);
}
//NBA 新聞快訊
function news_list(params) {
    return fetchApi("Nba/new_list", params).then(res => res.data);
}
//NBA新聞評論
function news_comments(params) {
    return fetchApi("Nba/news_comments", params).then(res => res.data);
}

//關(guān)于我
function website(params) {
    return fetchApi("Nba/website", params).then(res => res.data);
}
module.exports = {
    nab_schedule,
    live_detail,
    live_content,
    technical_statistics,
    player_detail,
    team_rank,
    team_info,
    Lineup,
    news_info,
    news_comments,
    news_list,
    website
};

數(shù)據(jù)渲染問題

在對請求到的接口數(shù)據(jù)渲染的過程之中并沒有遇到什么大的問題铆铆,頁面布局上的事情也就沒什么可講的了薄货,比較麻煩的事情是需要對接口返回的每個字段進(jìn)行分析所對應(yīng)的顯示問題碍论,這個再記錄一下賽事直播界面的數(shù)據(jù)、新聞詳情的數(shù)據(jù)渲染解析HTML的問題税娜。

頁面布局

小程序頁面布局使用的單位是rpx,對應(yīng)設(shè)計稿750px是最舒服的、rpx可以根據(jù)屏幕寬度進(jìn)行自適應(yīng)薯蝎。規(guī)定屏幕寬為750rpx谤绳。如在 iPhone6 上缩筛,屏幕寬度為375px,共有750個物理像素艺演,則750rpx = 375px = 750物理像素桐臊,1rpx = 0.5px = 1物理像素。

設(shè)備 rpx換算px (屏幕寬度/750 px換算rpx (750/屏幕寬度)
iPhone5 1rpx = 0.42px 1px = 2.34rpx
iPhone6 1rpx = 0.5px 1px = 2rpx

數(shù)據(jù)綁定渲染wxml頁面

var app = getApp();
Page({
    data: {
        list: [],
        footer: 0  //footer 底部導(dǎo)航欄切換高亮所要用到的值

    },
    onLoad: function() {
        this.nab_schedule("") //初始化數(shù)據(jù)
    },
    //ajax 列表請求
    nab_schedule: function(param) {
        var that = this;
        var params = {
            date: param
        };
        app.api.nab_schedule(params)
            .then(res => {
                that.setData({
                    list: res.data.data
                });
            })
            .catch(e => {
                console.error(e)
            });

    },

    //選擇日期變化請求數(shù)據(jù)
    selectDate: function(e) {
        this.nab_schedule(e.target.dataset.time);
    },
    //  點擊日期組件確定事件  
    bindDateChange: function(e) {
        this.nab_schedule(e.detail.value);
    }
})

新聞詳情頁面渲染使用到了wxParse,能搞方便的解決渲染HTML轉(zhuǎn)wxml的問題
模板頁面用import導(dǎo)入认烁、渲染HTML

 <import src="../wxParse/wxParse.wxml" />
  <view class="wxParse">
    <template is="wxParse" data="{{wxParseData:article.nodes}}" />
  </view>
</view>

在接口請求成功時候?qū)?code>res.body進(jìn)行一個操作處理却嗡,使用起來也比較簡單

 onLoad: function (e) {

    var data = {
      docid: e.docid || "D230QPOC0005877U"
    }
    var that = this;
    app.api.news_info(data)
      .then(res => {
        console.log(res);
        that.setData({
          item: res.data
        });
        that.news_comments(data);
        if(res.data && res.data.img.length!=0){
           var replaceStr = "<img src=" + (res.data.img[0])['src'] + ">";
           res.data.body = res.data.body.replace("<!--IMG#0-->", replaceStr);
        }
        WxParse.wxParse('article', 'html', res.data.body, that, 5);
       
      })
      .catch(e => {
        console.error(e)
        var article = "文章已經(jīng)刪除";
        WxParse.wxParse('article', 'html', article, that, 5);
      });
  }

圖片大圖預(yù)覽功能實現(xiàn)

演示:


image

小程序內(nèi)置的圖片查看放大組件wx.previewImage窗价,使用該方法可以實現(xiàn)圖片放大預(yù)覽效果功能

wx.previewImage({
      current: url, // 當(dāng)前顯示圖片的http鏈接
      urls: [url] // 需要預(yù)覽的圖片http鏈接列表
    })

總結(jié)

小程序一直處于不溫不火中舌镶、在筆者這這篇歸檔時、小程序已經(jīng)開通內(nèi)嵌網(wǎng)頁功能餐胀、整體來說小程序還是很容易上手的否灾、重要得多是多看文檔,查找相關(guān)資料、僅以此文章記錄開發(fā)體驗挎狸、小應(yīng)用還會持續(xù)更新断楷、有感興趣的小伙伴歡迎交流冬筒、源代碼托管在GitHub

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市土榴,隨后出現(xiàn)的幾起案子响牛,更是在濱河造成了極大的恐慌,老刑警劉巖矢赁,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件坯台,死亡現(xiàn)場離奇詭異瘫寝,居然都是意外死亡稠炬,警方通過查閱死者的電腦和手機(jī)首启,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來褒纲,“玉大人钥飞,你說我怎么就攤上這事〕垢眩” “怎么了课幕?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我留夜,道長香伴,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮蜂厅,結(jié)果婚禮上掘猿,老公的妹妹穿的比我還像新娘。我一直安慰自己改橘,他們只是感情好飞主,可當(dāng)我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布碌识。 她就那樣靜靜地躺著虱而,像睡著了一般。 火紅的嫁衣襯著肌膚如雪胖烛。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天众旗,我揣著相機(jī)與錄音趟畏,去河邊找鬼。 笑死利朵,一個胖子當(dāng)著我的面吹牛猎莲,可吹牛的內(nèi)容都是我干的著洼。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼豹悬,長吁一口氣:“原來是場噩夢啊……” “哼液荸!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起伤柄,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤响迂,失蹤者是張志新(化名)和其女友劉穎细疚,沒想到半個月后川梅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體贫途,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年姨裸,在試婚紗的時候發(fā)現(xiàn)自己被綠了傀缩。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡售淡,死狀恐怖慷垮,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情汤纸,我是刑警寧澤芹血,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布祟牲,位于F島的核電站,受9級特大地震影響议惰,放射性物質(zhì)發(fā)生泄漏乡恕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一运杭、第九天 我趴在偏房一處隱蔽的房頂上張望函卒。 院中可真熱鬧,春花似錦虱咧、人聲如沸锚国。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽车伞。三九已至,卻和暖如春帖世,著一層夾襖步出監(jiān)牢的瞬間休蟹,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工日矫, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留赂弓,地道東北人。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓哪轿,卻偏偏與公主長得像盈魁,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子窃诉,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理杨耙,服務(wù)發(fā)現(xiàn),斷路器珊膜,智...
    卡卡羅2017閱讀 134,601評論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,521評論 25 707
  • 給提問的開發(fā)者的建議:提問之前先查詢 文檔、通過社區(qū)右上角搜索搜索已經(jīng)存在的問題宣脉。 寫一個簡明扼要的標(biāo)題车柠,并且...
    極樂叔閱讀 13,388評論 0 3
  • 圣誕快樂 幕布掛滿星辰 我知道最閃的那個是你 每個街角都洋溢著祝福 你也在想我吧 在最美的年紀(jì) 遇到燦爛的你 從此...
    深北羽翼閱讀 230評論 2 5
  • 李智彬閱讀 768評論 0 1