将Tumblr博客与网站集成

8

我希望能够将我的tumblr动态集成到我的网站中。看起来tumblr提供了一个API用于此功能,但我不太清楚如何使用它。据我所知,我需要请求页面,然后tumblr会返回一个包含我的博客内容的xml文件。但是,我该如何将这个xml转换成有意义的html呢?我必须通过php解析它,将相关标签转换为标题等吗?我告诉自己这不可能那么痛苦。有人有什么见解吗?


问题明确提到了 PHP,这与编程有关。 - Dana the Sane
4个回答

11

现在有一个 JavaScript 的引用可以做到这一点,它来自于 Tumblr(您需要登录才能看到):http://www.tumblr.com/developers

最终类似于以下内容:

<script type="text/javascript" src="http://{username}.tumblr.com/js"></script>

2
这是一种超级简单的方法,它有效。您还可以在 js 后面添加 ?num=4 来确定显示多少篇文章(这里将显示 4 篇)。您还可以使用 css 对其进行样式设置,但此方法的缺点是不显示发布时间。 - CodeVirtuoso
如何设置偏移量?结果从哪里开始 - Massimo Fazzolari
1
虽然看起来有更多的选项(在这里查看:http://www.tumblr.com/docs/en/api/v2#posts),但似乎偏移量被忽略了。不过你可以使用完整的API来获得更好的控制。 - kweerious
看起来这个功能现在已经被移除了。有没有其他的替代方案? - Will Sewell
1
嗯,对我来说还是可以工作的。也许有一些坏字符或其他东西搞乱了渲染? - kweerious

4
你可以使用PHPTumblr,这是一个用PHP编写的API包装器,使得检索帖子变得轻而易举。

3
如果您访问http://yourblog.tumblr.com/api/read,其中“yourblog”应替换为您的博客名称(注意,如果您在自定义域上托管Tumblr博客,如我所做的那样,请使用该域名),您将看到博客的XML版本。对我来说,在Firefox上显示非常混乱,因此我使用Chrome,请尝试几种不同的浏览器,这将有助于查看XML文件格式良好、缩进等内容。
一旦您查看博客的XML版本,请注意每篇文章都具有属性="值"的数据集合。以下是我的博客示例:
<post id="11576453174" url="http://wamoyo.com/post/11576453174" url-with-slug="http://wamoyo.com/post/11576453174/100-year-old-marathoner-finishes-race" type="link" date-gmt="2011-10-17 18:01:27 GMT" date="Mon, 17 Oct 2011 14:01:27" unix-timestamp="1318874487" format="html" reblog-key="E2Eype7F" slug="100-year-old-marathoner-finishes-race" bookmarklet="true">

所以,有很多种方法可以做到这一点,我将展示我使用的方法,并在本文底部附上我的代码,以便您可以根据自己的需求进行调整。注意type="link"部分?或者id="11576453174"?这些是您将用于将数据拉入您的PHP脚本中的值。

以下是示例:

<!-- The Latest Text Post -->
<?php
    echo "";
    $request_url = "http://wamoyo.com/api/read?type=regular"; //get xml file
    $xml = simplexml_load_file($request_url); //load it
    $title = $xml->posts->post->{'regular-title'}; //load post title into $title
    $post = $xml->posts->post->{'regular-body'}; //load post body into $post
    $link = $xml->posts->post['url']; //load url of blog post into $link
    $small_post = substr($post,0,350); //shorten post body to 350 characters
    echo // spit that baby out with some stylish html
        '<div class="panel" style="width:220px;margin:0 auto;text-align:left;">
            <h1 class="med georgia bold italic black">'.$title.'</h1>'
            . '<br />' 
            . '<span>'.$small_post.'</span>' . '...' 
            . '<br /></br><div style="text-align:right;"><a class="bold italic blu georgia" href="'.$link.'">Read More...</a></div>
        </div>
        <img style="position:relative;top:-6px;" src="pic/shadow.png" alt="" />
    '; 
?>

所以,这其实非常简单。该PHP脚本将来自xml文件的数据(如帖子标题和帖子文本)放入php变量中,然后通过echo出这些变量以及一些html来创建一个div,其中包含博客文章的片段。这个特性是最近的文本帖子。随意使用它,只需进去将第一个url更改为您自己的博客即可。然后从您的xml文件中选择任何值。

例如,假设您想要的不是最近的,而是第二个最近的“照片”帖子。您必须将request_url更改为此:

$request_url = "http://wamoyo.com/api/read?type=photo&start=1"

或者说你想要带有特定标签的最新帖子。
$request_url = "http://wamoyo.com/api/read?tagged=events";

或者说你想要一个特定的帖子,只需使用id。
$request_url = "http://wamoyo.com/api/read?id=11576453174";

所以您需要做的就是在任何参数后面添加问号,并在有多个参数时使用 &。
如果您想要做更高级的事情,您需要使用 tumblr api 文档,这里是:http://www.tumblr.com/docs/en/api/v2 希望这对您有帮助!

1
我相信你也可以在自定义域名上使用“yourblogname.tumblr.com”。例如,“crystilogic.tumblr.com/api/read/json”对我有效,但“crystilogic.tumblr.com”会重定向到“mixingmemory.org”。 - isomorphismes
是的,绝对正确。哇...哈哈!自从我发这个问题以来,我学到了很多东西,真是太有趣了。现在我正在做node.js的东西,看到我已经学到了多少真是很酷。感谢stackoverflow上的人们! - Costa Michailidis

1

有两种主要方法可以做到这一点。首先,您可以解析xml,从您需要的标记中提取内容(根据您使用SAX或DOM解析器的方式有几种方法来实现此目的)。这是快速而简单的解决方案。

您还可以使用XSLT转换直接将xml源转换为所需的html。这更加复杂,因为您必须学习xslt模板的语法,这有点冗长。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接