Banner

Sử dụng phương pháp jquery ajax queue tải hết URL nguồn cấp Blogger

jQuery Ajax Queue tạo ra một phương thức mới đảm bảo chỉ có một yêu cầu AJAX được tải tại một thời điểm. Nó chờ (các) yêu cầu trước kết thúc trước khi bắt đầu một yêu cầu mới. Áp dụng plugin này vào Blogger để tải hết URL nguồn cấp feed


Đọc bài viết Làm thế nào để tối ưu trang tải nhanh khi tải URL nguồn cấp? có đoạn "Giới hạn số bài đăng cho kiểu URL feed cũng khác nhau nếu tải bằng URL blog thì tham số max-results tối đa bằng 150 nhưng nếu tải bằng ID blog thì con số tối đa max-results=500. Nếu bạn không sử dụng tham số max-results trong URL nguồn cấp thì mặc định số bài đăng bằng 25."

Sử dụng phương pháp ajax queue jquery tải hết URL nguồn cấp Blogger

Đề xuất cho bạn: Một vài cách xem lại ngày tạo blog

Như vậy bạn chỉ có thể gán số item tối đa bằng 150 vào URL nguồn cấp nếu tải bằng địa chỉ Blog do đó tham số start-index được sử dụng trong trường hợp này cho những URL nguồn cấp của những item tiếp theo.

Lấy ví dụ, tổng số bài viết của blog mình tại thời điểm viết bài này bằng 257 sau khi xuất bản bài này nó là 258 => Để tải hết 257 cần đến 2 URL như sau:

+ Tải feed ngắn dạng tóm tắt

https://www.thietkeblogspot.com/feeds/posts/summary?alt=json-in-script&max-results=150&start-index=1
https://www.thietkeblogspot.com/feeds/posts/summary?alt=json-in-script&max-results=150&start-index=151

+ Tải feed đầy đủ

https://www.thietkeblogspot.com/feeds/posts/default?alt=json-in-script&max-results=150&start-index=1
https://www.thietkeblogspot.com/feeds/posts/default?alt=json-in-script&max-results=150&start-index=151

Đề xuất: Sử dụng phương pháp Jquery get url trực tiếp thay thế cho url nguồn cấp trong blogspot

Mở rộng ra ta có URL nguồn cấp như sau:

/feeds/posts/["summary","default"]?alt=json-in-script&max-results=150&start-index=n

Trong đó:

  • ["summary","default"]: chọn 1 trong 2 dạng tóm tắt hoặc đầy đủ
  • 150: tổng số posts tối đa của một URL
  • n: lấy theo tham số start-index tăng dần theo tồng số bài viết ví dụ: 1, 151, 301, 451....

=> dữ liệu cần biết là tổng số posts của blog mà cái này URL feed nào cũng có cho dù dạng nào hay không có post nào cả, URL có dạng sau

/feeds/posts/summary?alt=json-in-script&max-results=0

Quay trở lại bài viết cũ Trích xuất nội dung bài viết từ nguồn cấp blog để lấy dữ liệu từ một post của tất cả các post yêu cầu phải tải hết tất cả URL nguồn cấp cùng lúc. Chẳng hạn như các bạn vẫn thường thấy là tạo sitemap html bằng nguồn cấp.

Từ những dữ liệu ở trên nếu đem áp dụng với blog của mình, sẽ làm như sau:

<script>//<![CDATA[
  window.addEventListener('load',function(){
    $.get('/feeds/posts/summary?alt=json&max-results=0',function(a){
      var $itemsPerPage=150,$startIndex=0,$totalResults=Number(a.feed.openSearch$totalResults.$t)
      if($totalResults>$itemsPerPage)$startIndex+=$itemsPerPage
      for(var i=1;i<$totalResults;i+=$startIndex){
        $.ajaxQueue({
          url:'/feeds/posts/summary',
          data:{'alt':'json','start-index':i,'max-results':$itemsPerPage},
          dataType:'jsonp'
        }).done(function(b){
          if(b.feed.entry){
            for(var c=0;c<b.feed.entry.length;c++){
              var entry=b.feed.entry[c]
              // Trích xuất nội dung bài viết từ nguồn cấp blog trong này
            }
          }
        })
      }
    },'jsonp')
  })
//]]></script>
<script async='async' defer='defer' src='https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js'/>
<script async='async' defer='defer' src='https://cdn.jsdelivr.net/gh/vietblogdao/js/ajaxqueue.min.js'/>

Với jQuery Ajax Queue là một plugin mở rộng được nhóm phát triển có tác dụng như sau:

Plugin này tạo ra một phương thức mới đảm bảo chỉ có một yêu cầu AJAX được chạy tại một thời điểm. Nó chờ (các) yêu cầu trước kết thúc trước khi bắt đầu một yêu cầu mới.

Bài đọc nhiều: Cách thêm thuộc tính async hoặc defer vào thẻ script jquery.js

Lấy ví dụ khi tạo trang sitemap đơn giản chỉ gồm liên kết và tiêu đề bài viết

<ol id="#sitemap"></ol>
<script>//<![CDATA[
  window.addEventListener('load',function(){
    $.get('/feeds/posts/summary?alt=json&max-results=0',function(a){
      var $itemsPerPage=150,$startIndex=0,$totalResults=Number(a.feed.openSearch$totalResults.$t)
      if($totalResults>$itemsPerPage)$startIndex+=$itemsPerPage
      for(var i=1;i<$totalResults;i+=$startIndex){
        $.ajaxQueue({
          url:'/feeds/posts/summary',
          data:{'alt':'json','start-index':i,'max-results':$itemsPerPage},
          dataType:'jsonp'
        }).done(function(b){
          if(b.feed.entry){
            for(var c=0;c<b.feed.entry.length;c++){
              var entry=b.feed.entry[c]
              for(var a=0;a<entry.link.length;a++){
                if(entry.link[a].rel=='alternate'){
                  var entry_alternate=entry.link[a].href
                  break
                }
              }
              var entry_title=entry.title.$t
              var contents='<li><a href='+entry_alternate+' title="'+entry_title+'">'+entry_title+'</a></li>'
              $('#sitemap').append(contents)
            }
          }
        })
      }
    },'jsonp')
  })
//]]></script>
<script async='async' defer='defer' src='https://cdnjs.cloudflare.com/ajax/libs/jquery/3.4.1/jquery.min.js'/>
<script async='async' defer='defer' src='https://cdn.jsdelivr.net/gh/vietblogdao/js/ajaxqueue.min.js'/>

    Thêm đánh giá

    Trở thành người đầu tiên bình luận cho bài viết này!

    Liên hệ Zalo