Hỏi về get nội dung bài viết blogger template

Discussion in 'Hỏi Đáp Kỹ Thuật' started by dev9x, Aug 23, 2020.

  1. dev9x

    dev9x Sơ Nhập Giang Hồ

    Chào các bác, mình mới mò qua template blogger vì em cần sửa một số thứ.
    Hiện tại khi truy cập vào trang bài viết em muốn lấy nội dung của bài viết
    ví dụ : http://mydomain.blogspot.com/bai-viet.html
    Em có search thấy là dùng thẻ <data. post.body/>.
    Nhưng em chạy toàn báo lỗi <!--Can't find substitution for tag [body.post]-->
    Bác nào biết về blogger giúp em với a. Em mò cả mấy ngày trời ko đc. Gà quá :(
     
    Last edited: Aug 24, 2020
  2. dev9x

    dev9x Sơ Nhập Giang Hồ

    có ai biết về blogger ko a
     
  3. xmenvn2510

    xmenvn2510 Moderator + MiddleMan Staff Member

    ý e hỏi cụ thể là cái gì. Crawler blogspot ah?
    Em crawl bằng php đúng ko?
     
    dev9x likes this.
  4. Dang

    Dang Bang Chúng

    Tùy vào var mà thớt truyền vào, thường là post nên nó là <data: post.body/> (<= không có khoảng trắng, do tính năng smile của 4rum) chứ không phải <data:body.post/> . Ví dụ như bên dưới - dòng 37 :
    HTML:
    <b:section id='PostDetail1' showaddelement='yes'>
        <b:widget id='Blog1' locked='true' title='Post' type='Blog'>
            <b:includable id='main' var='top'>
                <b:include data='posts' name='breadCrumb'/>
                <b:if cond='data:posts.notEmpty'>
                    <b:loop index='i' values='data:posts' var='post'>
                        <b:if cond='data:blog.pageType == "item" or data:blog.pageType == "static_page"'>
                            <b:include data='post' name='post'/>
                        <b:else/>
                            <b:include data='post' name='postItems'/>
                        </b:if>
                    </b:loop>
                <b:else/>
                    <div>No results matching query were found.</div>
                </b:if>
                <b:include name='pageNavigation'/>
            </b:includable>
            <b:includable id='postItems' var='post'>
                <article>
                    <header><h2><a expr:href='data:post.url' expr:title='data:post.title.escaped'><data:post.title/></a></h2></header>
                    <b:if cond='data:post.firstImageUrl != ""'>
                        <a expr:href='data:post.url' expr:title='data:post.title.escaped' class='thumbnail'>
                            <img expr:src='data:post.firstImageUrl' expr:alt='data:post.title.escaped'/>
                        </a>
                    </b:if>
                    <b:include data='post' name='postMeta'/>
                    <div class='post-snippet'>
                        <b:eval expr='data:post.longSnippet snippet {length: 250, links: false, linebreaks: false}'/>
                    </div>
                </article>
            </b:includable>
            <b:includable id='post' var='post'>
                <b:include data='post' name='schemaBlogPosting'/>
                <div class='post-entry'>
                    <b:include data='post' name='postMeta'/>
                    <div class='post-body'>
                        <data:post.body/>
                    </div>
                    <b:if cond='data:post.labels'>
                        <div class='post-labels'>
                            Labels : <b:loop values='data:post.labels' var='label'>
                                <a expr:href='data:label.url' expr:title='data:label.name' rel='category tag'><data:label.name/></a><b:if cond='data:label.isLast != true'>, </b:if>
                            </b:loop>
                        </div>
                    </b:if>
                </div>
            </b:includable>
            <b:includable id='schemaBlogPosting' var='post'>
                <script type='application/ld+json'>{"@context":"http://schema.org","@type":"BlogPosting","mainEntityOfPage":{"@type":"WebPage","@id":"<data:post.url/>"},"headline":"<data:post.title.escaped/>",<b:if cond='data:post.firstImageUrl'>"image":{"@type":"ImageObject","url":"<data:post.firstImageUrl/>"},</b:if><b:if cond='data:post.thumbnailUrl'>"thumbnailUrl":"<data:post.thumbnailUrl/>",</b:if>"datePublished":"<data:post.timestampISO8601/>","dateModified":"<data:post.lastUpdatedISO8601/>","author":{"@type":"Person","name":"<data:post.author/>"},"publisher":{"@type":"Organization","name":"{@.author.name}"},"description":"<b:if cond='data:blog.metaDescription == data:view.description'><data:view.description.escaped/><b:else/><data:post.snippet.escaped/></b:if>"}</script>
            </b:includable>
            <b:includable id='breadCrumb' var='posts'>
                <b:if cond='data:blog.url != data:blog.homepageUrl'>
                    <script type='application/ld+json'>{"@context":"http://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"item":{"@type":"WebSite","@id":"<data:blog.homepageUrl/>","name":"Homepage"}},<b:if cond='data:blog.pageType == "item" or data:blog.pageType == "static_page"'><b:loop values='data:posts' var='post'><b:if cond='data:post.labels'><b:loop index='i' values='data:post.labels' var='label'><b:if cond='data:i == 0'>{"@type":"ListItem","position":2,"item":{"@type":"WebPage","@id":"<data:label.url/>","name":"<data:label.name/>"}},</b:if></b:loop>{"@type":"ListItem","position":3,"item":{"@type":"WebPage","@id":"<data:view.url/>","name":"<data:view.title.escaped/>"}}<b:else/>{"@type":"ListItem","position":2,"item":{"@type":"WebPage","@id":"<data:view.url/>","name":"<data:view.title.escaped/>"}}</b:if></b:loop><b:else/>{"@type":"ListItem","position":2,"item":{"@type":"WebPage","@id":"<data:view.url/>","name":"<b:if cond='data:blog.searchQuery'><data:blog.searchQuery/><b:elseif cond='data:blog.searchLabel'/><data:blog.searchLabel/><b:else/><data:blog.title.escaped/></b:if>"}}</b:if>]}</script>
                </b:if>
            </b:includable>
            <b:includable id='postMeta' var='post'>
                <div class='post-meta'>By <span class='author'><data:post.author/></span> at <span class='timestamp'><data:post.timestamp/></span></div>
            </b:includable>
            <b:includable id='pageNavigation'>
                <b:if cond='data:olderPageUrl or data:newerPageUrl'>
                    <div class='page-navigator'>
                        <div class='clearfix'></div>
                        <b:if cond='data:newerPageUrl'>
                            <b:if cond='data:blog.url != data:blog.homepageUrl + data:blog.searchLabel'>
                                <a class='newer' expr:href='data:newerPageUrl' expr:title='data:newerPageTitle'>&#171; <data:newerPageTitle/></a>
                            </b:if>
                        </b:if>
                        <b:if cond='data:olderPageUrl'>
                            <a class='older' expr:href='data:olderPageUrl' expr:title='data:olderPageTitle'><data:olderPageTitle/> &#187;</a>
                        </b:if>
                        <div class='clearfix'></div>
                    </div>
                </b:if>
            </b:includable>
        </b:widget>
    </b:section>
    
     
  5. Hoa Mãn Lâu

    Hoa Mãn Lâu Trưởng Môn

    Có chỗ nào hd lập trình themes cho blogspot ko thím nhỉ? Mấy cái themes blogspot nhìn củng vi diệu quá trời luôn
     
  6. Dang

    Dang Bang Chúng

    Em tự mò và tham khảo thêm mấy theme phổ biến, ngoài ra em cũng tham khảo qua :
    Code:
    https://bloggerbook.blakbin.com/
    Link đó cũng có nhiều cái hay. Trước em viết bằng PHP để xuất theme blogger nhanh gọn lẹ mà import qua file xml được không tới 2000 post, nó không nhập nữa, cũng không báo lỗi gì luôn, mấy bữa sau cũng vậy. Nên em bỏ luôn, blogger chỉ vệ tinh với tên miền tùy chỉnh thì tạm ổn.
     
    Hoa Mãn Lâu likes this.
  7. dev9x

    dev9x Sơ Nhập Giang Hồ

    Sorry bác em gõ sai phải là <data: post.body/> mới đúng ko có dấu cách.
    Nhưng em gõ vào nó toàn báo <!--Can't find substitution for tag [body.post]--> là sao nhỉ
     
  8. dev9x

    dev9x Sơ Nhập Giang Hồ

    Ví dụ như thế này em muốn in ra nội dung bài viết
    HTML:
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE html>
    <html b:css='false' b:defaultwidgetversion='2' b:layoutsVersion='3' b:responsive='true' b:templateUrl='indie.xml' b:templateVersion='1.0.0' expr:dir='data:blog.languageDirection' xmlns='http://www.w3.org/1999/xhtml' xmlns:b='http://www.google.com/2005/gml/b' xmlns:data='http://www.google.com/2005/gml/data' xmlns:expr='http://www.google.com/2005/gml/expr'>
    <head>
      <meta content='width=device-width, initial-scale=1' name='viewport'/>
      <title><data:blog.pageTitle/></title>
      <b:skin><![CDATA[]]></b:skin>
      <link href='https://mydomain.comcss/style.css' rel='stylesheet' type='text/css'/>
    
    </head>
    <body>
      <header class='dsk-header'>
        <b:section id='header' maxwidget='1' name='header' showaddelement='yes'/>
            <nav class='nav normal'>
                <div class='nav-wrapper'>
                    <div class='nav-logo'>
                        <a href='#'/>
                    </div>
                </div>
            </nav>
        </header>
    
        <data:post.body/>
    
      <footer>
            Site Footer
        </footer>
    </body>
    </html>
     
  9. dev9x

    dev9x Sơ Nhập Giang Hồ

    em truy cập trang bài viết toàn báo lỗi <!--Can't find substitution for tag [body.post]-->
     
  10. Dang

    Dang Bang Chúng

    Cấu trúc của thớt như vậy lỗi là đúng rồi, <data: post.body/> phải nằm trong widgettype='Blog' hoặc type='PopularPosts'. Dễ nhất là thớt mở cái theme mặc định của Blogger seach đoạn <data: post.body/> đó rồi xem cấu trúc của nó. Cũng dễ, cơ bản có 2 widget đó + viết lại mấy thẻ meta với bổ sung snippet nữa.
     
    dev9x likes this.
  11. dev9x

    dev9x Sơ Nhập Giang Hồ

    Thank bác, để em mò thử