Check-in [c49ea11126]
Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
| Comment: | Retrieve count of backlinks to URL from various web services (Facebook, Google+, Twitter, Reddit, StumbleUpon, LinkedIn, Delicious, Pinterest) <em>Shallow merge of previous <code>php-scripts.fossil</code> repo.</em> |
|---|---|
| Timelines: | family | ancestors | descendants | both | trunk |
| Files: | files | file ages | folders |
| SHA1: |
c49ea1112614cf0bc1c939cbfb190905 |
| User & Date: | mario 2014-12-13 17:36:28 |
Context
|
2015-03-08
| ||
| 18:29 | Transform PHP function parameter /*type*/ hints into assert() statements. check-in: 5eaf0c63f6 user: mario tags: trunk | |
|
2014-12-13
| ||
| 17:36 | Retrieve count of backlinks to URL from various web services (Facebook, Google+, Twitter, Reddit, StumbleUpon, LinkedIn, Delicious, Pinterest) <em>Shallow merge of previous <code>php-scripts.fossil</code> repo.</em> check-in: c49ea11126 user: mario tags: trunk | |
|
2014-12-12
| ||
| 20:10 | Use array_shift for multiple positional - - - stdin/json placeholders. Don't populate $args from optional args. check-in: e4e8e5030f user: mario tags: trunk | |
Changes
Added social-media-links/social.ajax.php.
> > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 |
<?php
/**
* description: Generates an image from the cumulative social media backlinks count
*
*/
include("./social.count.php");
$num = @social_links_count(filter_var($_GET["url"], FILTER_SANITIZE_URL));
header("Content-Type: json/object; charset=UTF-8");
print json_encode($num);
|
Added social-media-links/social.count.php.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
<?php
/**
* title: shared_count
* description: Retrieve social media links/shares/likes/upvotes/views
* x-feature: google+, facebook, linkedin, reddit, twitter, stumbleupon, delicious
* version: 0.1.1
*
* Query multiple online portals for common user upvotes. Returns a list for making
* a summary total.
*
*/
#-- load curl/curl_multi() wrapper
if (!function_exists("curl")) {
include("./curl.php"); //fossil.include-once.org/hybrid7/doc/trunk/php7/curl.php
}
/**
* Retrieve number of links from social media portals to given $url.
*
* Runs HTTP requests in parallel, and imposes a maximum timeout.
*
*
*/
function social_links_count($url) {
$url = rawurlencode($url);
// define APIs
$services = array(
"twitter" => "http://urls.api.twitter.com/1/urls/count.json?url=$url",
"linkedin" => "http://www.linkedin.com/countserv/count/share?url=$url&format=json",
"facebook" => "http://api.facebook.com/restserver.php?method=links.getStats&format=json&urls=$url",
"google" => curl("https://clients6.google.com/rpc")
->HttpHeader(array("Content-type: application/json"))
->PostFields(json_encode(array(array( // guess who's unwieldy
"method"=>"pos.plusones.get", "id"=>"p", "jsonrpc"=>"2.0", "key"=>"p", "apiVersion"=>"v1",
"params"=>array("nolog"=>TRUE, "id"=>rawurldecode($url), "source"=>"widget", "userId"=>"@viewer", "groupId"=>"@self"),
)))),
"reddit" => "http://www.reddit.com/api/info.json?url=$url",
"sumbleupon" => "http://www.stumbleupon.com/services/1.01/badge.getinfo?url=$url",
"delicious" => "http://feeds.delicious.com/v2/json/urlinfo/data?url=$url",
"pinterest" => curl("http://api.pinterest.com/v1/urls/count.json?url=$url"),
);
// run and extract scores
return(
array_map(
"json_rx_count",
curl_multi($services)->exec(0.75)
)
);
}
/**
* Since we have unambiguous and concise JSON blobs, it's sufficient and less
* overhead to just extract the numbers we're looking for.
*
* This also avoids looping over the reddit result lists manually, and integer
* casting afterwards.
*
*/
function json_rx_count($string, $rx="count|score|views|total_count|total_posts") {
if (preg_match_all("/(?<!\\\\)\"(?:$rx)\"\s*:\s*\"?(\d+)/", $string, $uu)) {
return array_sum($uu[1]);
}
}
/**
* Simple caching wrapper
*
*/
function cache_fn($fn, $args, $ttl=7200) {
// check cache
$p = serialize($args);
$cache = json_decode(file_get_contents("./$fn.cache.json"), TRUE);
if (isset($cache[$p]) and (time() < $cache[$p]["time"] + $ttl)) {
return $cache[$p]["data"];
}
// get data
$data = call_user_func_array($fn, (array)$args);
// update cache
$cache[$p] = array("time"=>time(), "data"=>$data);
file_put_contents("./$fn.cache.json", json_encode($cache, JSON_PRETTY_PRINT), LOCK_EX);
return $data;
}
?>
|
Added social-media-links/social.html.php.
> > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <?php /** * description: Generates a static plain-text link list for URL sharing * */ // escape $url = htmlspecialchars(urlencode($_REQUEST["url"]), ENT_QUOTES|ENT_HTML5, "UTF-8"); // output print " <span class=social-share-links> <a href=https://plus.google.com/share?url=$url title=google+>g+</a> <a href=https://www.facebook.com/sharer/sharer.php?u=$url title=facebook>fb</a> <a href=https://twitter.com/intent/tweet?url=$url title=twitter>tw</a> <a href=http://reddit.com/submit?url=$url title=reddit>rd</a> <a href=https://www.linkedin.com/shareArticle?mini=true&url=$url title=linkedin>in</a> <a href=https://www.stumbleupon.com/submit?url=$url title=stumbleupon>su</a> <a href=https://del.icio.us/post?url=$url title=delicious>dl</a> </span> "; |
Added social-media-links/social.img.php.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
<?php
/**
* description: Generates an image from the cumulative social media backlinks count
*
*/
#-- retrieve
include("./social.count.php");
$url = @$_GET["url"];
if (filter_var($url, FILTER_VALIDATE_URL)) {
$num = cache_fn("social_links_count", $url);
$total = array_sum($num);
}
else {
$total = "no url given";
}
#-- create PNG
$png = imagecreate(6 + 9 * strlen($total), 20);
$bg = imagecolorallocate($png, 255, 255, 255);
$fg = imagecolorallocate($png, 55, 55, 55);
imagestring($png, 5, 3, 2, "$total", $fg);
#-- output
header("Content-Type: image/png; version=1.2");
imagepng($png);
imagedestroy($png);
?>
|