api.php 3.25 KB
Newer Older
root's avatar
root committed
1
<?php
2
//Copyright (c) 2011, David Morley. This file is licensed under the Affero General Public License version 3 or later. See the COPYRIGHT file.
3
$_GET['key'] === '4r45tg' || die;
4 5 6

require_once __DIR__ . '/config.php';

dmorley's avatar
cleanup  
dmorley committed
7
$dbh = pg_connect("dbname=$pgdb user=$pguser password=$pgpass");
8 9
$dbh || die('Error in connection: ' . pg_last_error());

10

11
if ($_GET['format'] == 'georss') {
dmorley's avatar
cleanup  
dmorley committed
12
  echo <<<EOF
noplanman's avatar
noplanman committed
13 14 15 16 17 18
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"
xmlns:georss="http://www.georss.org/georss">
<title>Diaspora Pods</title>
<subtitle>IP Locations of Diaspora pods on podupti.me</subtitle>
<link href="http://podupti.me/"/>
David Morley's avatar
fix api  
David Morley committed
19 20

EOF;
21
  $sql    = "SELECT * FROM pods WHERE hidden <> 'yes'";
dmorley's avatar
cleanup  
dmorley committed
22
  $result = pg_query($dbh, $sql);
23 24
  $result || die('Error in SQL query: ' . pg_last_error());

dmorley's avatar
cleanup  
dmorley committed
25 26
  $numrows = pg_num_rows($result);
  while ($row = pg_fetch_array($result)) {
27
    $pod_name = htmlentities($row['name'], ENT_QUOTES);
28
    $tip      = sprintf(
noplanman's avatar
noplanman committed
29 30 31 32 33 34 35 36
      'This pod %1$s has been watched for %2$s months and its average ping time is %3$s with uptime of %4$s%% this month and was last checked on %5$s. On a score of 100 this pod is a %6$s right now',
      $pod_name,
      $row['monthsmonitored'],
      $row['responsetimelast7'],
      $row['uptimelast7'],
      $row['dateupdated'],
      $row['score']
    );
37 38 39 40 41 42
    if ($row['secure'] == 'true') {
      $method = 'https://';
    } else {
      $method = 'http://';
    }
    echo <<<EOF
noplanman's avatar
noplanman committed
43 44 45 46 47 48 49 50 51 52
<entry>
  <title>{$method}{$row['domain']}</title>
  <link href="{$method}{$row['domain']}"/>
  <id>urn:{$row['domain']}</id>
  <summary>Pod Location is: {$row['country']}
	&#xA;
{$tip}</summary>
  <georss:point>{$row['lat']} {$row['long']}</georss:point>
  <georss:featureName>{$row['domain']}</georss:featureName>
</entry>
root's avatar
root committed
53

David Morley's avatar
fix api  
David Morley committed
54
EOF;
dmorley's avatar
cleanup  
dmorley committed
55
  }
56
  echo '</feed>';
57 58
} elseif ($_GET['format'] == 'json') {
  $sql    = 'SELECT id,domain,status,secure,score,userrating,adminrating,city,state,country,lat,long,ip,ipv6,pingdomurl,monthsmonitored,uptimelast7,responsetimelast7,local_posts,comment_counts,dateCreated,dateUpdated,dateLaststats,hidden FROM pods';
dmorley's avatar
cleanup  
dmorley committed
59
  $result = pg_query($dbh, $sql);
60 61
  $result || die('Error in SQL query: ' . pg_last_error());

dmorley's avatar
cleanup  
dmorley committed
62 63 64
  $numrows = pg_num_rows($result);
  //json output, thx Vipul A M for fixing this
  header('Content-type: application/json');
65 66 67
  $rows          = array_values(pg_fetch_all($result));
  $obj->podcount = $numrows;
  $obj->pods     = $rows;
68
  if ($_GET['method'] == 'jsonp') {
dmorley's avatar
cleanup  
dmorley committed
69 70 71 72
    print $_GET['callback'] . '(' . json_encode($obj) . ')';
  } else {
    print json_encode($obj);
  }
73 74 75
} else {
  $i      = 0;
  $sql    = "SELECT * FROM pods WHERE hidden <> 'yes' ORDER BY uptimelast7 DESC";
dmorley's avatar
cleanup  
dmorley committed
76
  $result = pg_query($dbh, $sql);
77 78
  $result || die('Error in SQL query: ' . pg_last_error());

dmorley's avatar
cleanup  
dmorley committed
79 80
  $numrows = pg_num_rows($result);
  while ($row = pg_fetch_array($result)) {
81 82 83 84 85 86 87 88 89 90 91 92
    if ($row['status'] == 'up') {
      $status = 'Online';
    } else {
      $status = 'Offline';
    }
    if ($row['secure'] == 'true') {
      $method = 'https://';
      $class  = 'green';
    } else {
      $method = 'http://';
      $class  = 'red';
    }
93
    echo $row['domain'] . ' Up ' . $row['uptimelast7'] . '% This Month - Located in: ' . $row['country'];
94
    if ($i < ($numrows - 1)) {
95
      echo ',';
dmorley's avatar
cleanup  
dmorley committed
96
    }
97 98
    $i ++;
  }
David Morley's avatar
fix api  
David Morley committed
99

100 101
  pg_free_result($result);
  pg_close($dbh);
root's avatar
root committed
102
}