如何将Google+徽章添加为图片,而不是JavaScript?

时间:2014-01-27 22:22:34

标签: javascript php google-plus

我想在页面中添加Google+徽章,但https://developers.google.com/+/web/badge/中的代码在某些浏览器中无效,特别是没有第三方Cookie支持。我想添加该徽章,但作为<img>标记(如Stack Exchange徽章)。这可能吗?

1 个答案:

答案 0 :(得分:2)

为了在不使用JavaScript的情况下将Google+徽章添加到我的网站(因为我遇到了JavaScript代码的问题,而且我不喜欢它依赖于第三方Cookie的方式,我将一个快速的PHP脚本整合到一起将获取徽章的代码,将其渲染为图像,然后将其输出到浏览器。

首先,我创建了一个非常简单的HTML页面,其中仅包含我的Google+徽章from their generator的代码:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
    <head>
        <title>Google +</title>
        <style type="text/css">
html, body {
    padding: 0;
    margin: 0;
    background-color: #eee;
    width: 200px;
    height: 280px;
    overflow: hidden;
}
        </style>
    </head>
    <body>
        <!-- Place this tag where you want the widget to render. -->
<div class="g-person" data-width="200" data-href="//plus.google.com/117363378958465856853" data-theme="dark" data-showtagline="false" data-rel="author"></div>
<!-- Place this tag after the last widget tag. -->
<script type="text/javascript">
  (function() {
    var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
    po.src = 'https://apis.google.com/js/platform.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
  })();
</script>
    </body>
</html>

然后我创建了以下PHP脚本:

<?php

$path = tempnam('/tmp','jgitlin-badge').'.png';

$html_file = realpath(dirname(__FILE__).'/googleplusbadge.html');

$cmd = "/usr/local/bin/wkhtmltoimage --javascript-delay 3000 --transparent --disable-smart-width --width 200 $html_file $path";
exec($cmd);

header('Last-Modified: '.gmdate('D, d M Y H:i:s', filemtime($path)).' GMT', true, 200);
header('Cache-Control: max-age=14400, public',true);
header('Pragma: Public',true);
header('Expires: ' . gmdate('D, d M Y H:i:s', time()+14400) . ' GMT',true);
header('Content-Length: '.filesize($path),true);
header("Content-Type: image/png",true);
readfile($path);

此代码取决于wkhtmltoimage上服务器上安装的the WebKit HTML to image tool /usr/local/bin/wkhtmltoimage。它会将Google+徽章的HTML呈现为PNG图像,并以4小时的缓存时间将其发送到浏览器。

我个人在Apache中启用了mod_cache,所以Apache缓存了这个,服务器只需要每4小时运行一次这个脚本,但是其他人应该保存生成的PNG文件,如果它过时则重新生成。

要使用此功能,只需在页面中添加一个指向PHP脚本的<img>标记... as seen on my site