事由
因為第一次接觸到 RSS,發現了完全不了解的問題。
目前網站中有部落格,但是非WP或其他第三方套件,而是自己寫的一個部落格,可以發佈、也可看所有文章列表,也有用 htaccess 重新寫了網址規則。
爬爬爬
我查了一下RSS製作方式
http://raymondchou.pixnet.net/blog/post/144233644-%E5%A6%82%E4%BD%95%E8%A3%BD%E4%BD%9Crssfeed%E4%BD%BF%E7%94%A8mysql%E8%88%87php-
他的做法是創建一個數據表,將需要做成RSS的內容都丟進去,最後再用 php while 將這資料表的欄位資料印出,在旁邊加上 RSS 上面的那種 tag
例如 <title>
等等。這是我目前看到好像是 RSS製作的一種方式?這是標準的製作方式嗎?
XML Format ?
因目前跟某公司合作,主要是想更新我這邊的文章到他那邊去。有給了我一個 XML Format 格式,上面的標籤真的是不少。
這是其中一段:
<startYmdtUnix>1457280000000</startYmdtUnix> //Mandatory
<endYmdtUnix>1457480000000</endYmdtUnix> //Mandatory
<title>String // article title</title> //Mandatory
<category>String</category> //Mandatory
<subCategory>String</subCategory> //Optional
<publishTimeUnix>1457480000000</publishTimeUnix> //Mandatory
<updateTimeUnix>1457480000000</updateTimeUnix> //Optional
//Optional
// 0 stands for general article with plain text, images and short video;
// 1 stands for long video news. Warning!!! if the article is long video news, this tag is necessary and must be 1.
// 2 stands for the comic book.
// 5 is for video content, only allow one video and text in contents.
// 6 stand for trailer for a specific movie, only allow one video and text in contents.
<contentType>0, 1, 2, 5, 6</contentType>
<thumbnail>String // relative file of thumbnail file</thumbnail> //Optional
<contents> //Contain at least one of image, video, text. Can be multiple.
<image>
<title>String // image title</title> //Optional
<description>String // image caption</description> //Optional
<url>String // relative file path of image file</url> //Mandatory
<thumbnail>String // relative file of thumbnail file</thumbnail> //Optional
</image>
<video>
<title>String // video title</title> //Optional
<description>String // video caption</description> //Optional
<url>String // relative file path of video file</url> //Mandatory
<thumbnail>String // relative file path of thumbnail file</thumbnail> //Optional
<restrictedCountries> //Optional
<country>String // ISO 31661 alpha2</country>
<country>String // ISO 31661 alpha2</country>
<country>... // others</country>
</restrictedCountries>
<width>449</width> //Optional
<height>101</height> //Optional
</video>
<text>
<content> //Mandatory
<![CDATA html tag or pure text ]]>
</content>
</text>
</contents>
問題產生
XML Format
跟 RSS 是一樣的道理嗎?XML Format
每一個 tag
跟我製作 RSS 的方式是否是正確的方向?XML Format
的標籤就可以了嗎?<articles>
, <article>
,但RSS教學中:http://www.w3school.com.cn/rss/index.asp 他的是 <channel>
, <item>
,WHY?抱歉問題有點多,但這確實困擾了我幾天
對方提供的 XML Format 跟 RSS 是一樣的道理嗎?
對方會這樣提供我想應該是的
XML Format 每一個 tag 跟我製作 RSS 的方式是否是正確的方向?
當然不一樣,RSS是有自己的標準格式
也就是說,我新增部落格文章的同時,除了丟一份到我原本網站要顯示的那個數據表外,再把需要製作 RSS 的部落格內容也丟到另一個 RSS 專屬數據表去,然後再打印出來給對方取得?
這個你要問對方是怎麼運作了,如果是標準的RSS訂閱器一開始會全部抓進去,之後會判斷哪些你讀過,然後只抓目前還沒讀取過的新文章
這個製作方式是標準作法嗎?
你如果是給大家用的RSS訂閱的,請使用正確的RSS格式,廠商的請另外再準備一份特殊格式
所謂的「當我新增一篇文章,對方就能夠抓到」,是指這個 RSS 嗎?我只要將部落格內容丟給 RSS 專屬的數據庫,再利用 php 打印這個數據庫的文章,替他加上上方 XML Format 的標籤就可以了嗎?
RSS應該每次修改或新增文章,RSS理論上都要重新產生一次才對,然後抓取最新的跟上面說的一樣
我發現不管是 facebook 即時文章,或是對方給我的格式中,他的名稱都是 , ,但RSS教學中:http://www.w3school.com.cn/rss/index.asp 他的是 , ,WHY?
因為他們都有遵照RSS 2.0標準
補充一下RSS 2.0標準連結
我文章內容一定要跟他訂製的tag標籤
一樣嗎?因為我發現一個問題,我產生文章是使用第三方套件編輯器,所以他無論是加入影片照片,都沒有他要的那種格式
asys0512
要啊!
那你可能要自己寫或是問他有沒有什麼工具可以提供你用
Homura 什麼...天啊,我也是快瘋了。<content:encoded>
裡面也要有他要的格式?我不能直接給html嗎
asys0512
這你要問對方了...
不過廠商為啥不用RSS 2.0
RSS標準就是為了大家都用一樣才定的啊
我發現facebook 即時文章跟 LINE 的格式好像都是 2.0 ?
真的很傷腦筋就是了,假設我編輯器每個 <img
都要變成這種格式<<image> <<title></title> //Optional <<description></description> //Optional <<url></url> //Mandatory <<thumbnail></thumbnail> //Optional</image>
沒套件可以用啊?這一般編輯器哪來會給這東西
asys0512
現在應該都2.0了
我突然想到黑暗執行緒大大的RSS確實是塞html標籤在<description>
裡面
不過他有對標籤作轉換就是了
view-source:http://blog.darkthread.net/blogs/darkthreadtw/rsscomments.aspx
不過我怕你那個廠商寫的程式可能會不接受?
你還是問清楚會比較好...
我只是好奇我現在的做法是不是對的,我會建立兩個數據庫,分別是給臉書跟LINE的(舉例,這兩個要的RSS tag 有些不一樣...)
當發表文章的時候,我會將需要的值也丟進去這兩個數據庫中?這是對的做法嗎?然後再用這個別人寫的範例分別印出RSS...:https://www.pontikis.net/blog/simple-rss-class-create-rss-feed
以及怎麼轉譯啊,假設我的文章內容content有需要轉譯的字串(RSS官方說這兩個 <
和 &
需要轉)? ...我要怎麼再丟到資料庫之前先轉譯?
asys0512
2個不一樣嗎?
應該沒錯
不管是新增還是修改RSS都需要重新產生
轉譯的話
你可以產生RSS時再轉就好了
我查到PHP能用這個方法
http://www.w3school.com.cn/PHP/func_string_htmlspecialchars.asp
我發表文章時至少有三種欄位,title
, content
, cover
(文章的封面照片)
而content創建的工具是網上的第三方套件編輯器,但這個編輯器又可以新增圖片,或是 iframe instagram
, youtube
影音或貼文,這意味著我必須要在 content
中用某函數要先找到兩種東西
<img src="https://..abc.jpg">
<iframe></iframe>
例如圖片的話 RSS 要的是這樣的格式
<image><url> XXX </url></image>
那我就必須要先把 <img src="https://..abc.jpg">
取出,然後取得 src 的內容 abc.jpg
然後再取代成 <image><url>https://..abc.jpg</url></image>
返回。
無論中途的字串是什麼,我必須先把他提出來,再包裝成 RSS 要的 <tag>標籤
,這能用什麼函數做到?
asys0512
喔你是想從文章取出來嗎?
這個可以用正規表示找出來吧
https://stackoverflow.com/questions/18653440/regular-expression-to-remove-an-iframe
我這個做法是對的嗎?
asys0512
你是說符合廠商的格式嗎?
你要問廠商才對啊
所以那個 xml 網址中,印出來的資料就要是他規定的那樣顯示?例如 <img>
就不是img 了,而是 <image><url>https://..abc.jpg</url></image>
?
asys0512
如果像你這樣說一樣的話
可能不能塞html在裡面唷
所以你還是得問廠商才是到那段程式到底是怎麼解讀的!!
看來是如果丟 html 就加上這個標籤就行 <![CDATA[
, 但這裡面的 html 不知道需不需要轉換?
asys0512
對!<![CDATA[
就是讓XML分析器認為裡面沒有XML標記
了解,所以不需要轉換,直接給 html 就可以?
我好奇:
https://developers.facebook.com/docs/instant-articles/publishing/setup-rss-feed
content:encoded 標籤不知道跟上面那個是不是一樣的道理?可以放html
asys0512
應該是一樣唷
可是查了很多還是會包在<![CDATA[
裡面
你自己試試看可不可以吧!@@
那個,不要將rss跟xml兩著搞混在一起看啦
rss的全名叫 Really Simple Syndication
也就是它只是一種訂閱服務的意思,大多數是採用xml格式且是統一的規範的東西
xml是一種資料規範好的文件,採用tag標簽的原理。
也就是兩著在說明上是有很大的不同的。
真正要說明的話,就是rss它是一種依照正規的規範xml檔的意思。也就是其tag的命名跟階層的使用方式都有一定的規則。