Vue項目中jsonp抓取數據實現方式


因為最近在做vue的項目,在前端做數據的時候遇到了數據抓取的難題,查了一些資料,自己也研究了一下,總體來說是搞出來了(基於黃奕老師的項目找出來的經驗),廢話不多說,直接上代碼Open-mouthed smile

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

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

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


先安裝依賴:cnpm install --save jsonp

1. 然后創建一個jsonp.js

 
 
 
         
import originJSONP from 'jsonp'   //引用jsonp

  export default function jsonp(url,data,options){

    //地址判斷和調用處理地址函數

    url +=(url.indexOf('?')<0?'?':'&')+param(data)

    //返回一個Promise

    return new Promise((resolve,reject)=>{

      originJSONP(url,options,(err,data)=>{  //用原始的jsonp調用有三個參數

        if(!err){

         resolve(data)

        }else{

         reject(err)

        }

      })

    })

  }
2、創建一個函數處理地址
 
 
 
         
  1 function param(data){
  2 
  3   let url = '';
  4 
  5   for(var k in data){
  6 
  7     let value = data[k]!==undefined?data[k]:'';
  8 
  9     url +=`&${k}=${encodeURIComponent(value)}`;  //地址拼接參數
 10 
 11   }
 12     return url ? url.substring(1):''
 13 }
2.自己創建個api文件夾,創建一個recomm.js,config  主要用途是處理請求地址url和頭部的公共參數,引入剛剛的jsonp.js 
代碼如下:
  1   import jsonp from '' // jsonp.js文件地址;
  2 
  3   import {commonParams,options}  from 'config.js 文件地址'  //把congfig.js 對象導入進來
  4 
  5   export function getRemented(){
  6 
  7     const url = '這個是你想要挖掘的地址'  ;
  8 
  9    //例如我想要的地址是:https://c.y.qq.com/musichall/fcgi-bin/fcg_yqqhomepagerecommend.fcg
 10 
 11     const data = Object.assign({},commonParams, //這些參數都是可以在network Header 下 
 12    	query string parameters
 13       platform:'h5',
 14       uin:0,
 15       needNewCode:1
 16     })
 17 
 18     return jsonp(url,data,options)
 19   }
 20 
 21 
3. config.js //用途把公共的參數提取出來
代碼如下:
  1 export const commonParams = {
  2   g_tk:5318,
  3   inCharset: 'utf-8',
  4   outCharset:'utf-8',
  5   notice:0,
  6   format:'jsonp'
  7 }
  8 export const options = {
  9   param:'jsonpCallback'
 10 }
 11 export const ERR_OK = 0;
 12 
 13 //在自己的模塊中調用 既可以看到數據
 14 
 15 <template>
 16   <div id="app"></div>
 17 </template>
 18 
 19 <script type="text/ecmascript-6">
 20 
 21   import{getRemented} from '../../api/recomm'
 22 
 23   import {ERR_OK} from '../../api/config'
 24 
 25   export default{
 26       data(){
 27           return{}
 28       },
 29       created(){
 30           this._getData();
 31       },
 32      methods:{
 33           _getData (){
 34 	  getRemented ().then((res)=>{
 35 	    if(res.code===ERR_OK){
 36               console.log(res.data)
 37              }
 38           })
 39        }
 40      }
 41   }
 42 
 43 </script>
 44 
 45 <style lang="scss">
 46 
 47 #app {
 48 
 49   font-family: 'Avenir', Helvetica, Arial, sans-serif;
 50 
 51   -webkit-font-smoothing: antialiased;
 52 
 53   -moz-osx-font-smoothing: grayscale;
 54 
 55   text-align: center;
 56 
 57   /*color: #2c3e50;*/
 58 
 59 }
 60 
 61 </style>
 62 
 63 
VUE解決axios跨域問題
Image







免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM