api.php 3.17 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());

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

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

dmorley's avatar
cleanup  
dmorley committed
23 24
  $numrows = pg_num_rows($result);
  while ($row = pg_fetch_array($result)) {
25
    $pod_name = htmlentities($row['name'], ENT_QUOTES);
noplanman's avatar
noplanman committed
26
    $summary  = sprintf(
noplanman's avatar
noplanman committed
27 28 29 30 31 32 33 34
      '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']
    );
noplanman's avatar
noplanman committed
35
    $scheme   = $row['secure'] === 'true' ? 'https://' : 'http://';
36
    echo <<<EOF
noplanman's avatar
noplanman committed
37
<entry>
noplanman's avatar
noplanman committed
38 39
  <title>{$scheme}{$row['domain']}</title>
  <link href="{$scheme}{$row['domain']}"/>
noplanman's avatar
noplanman committed
40 41 42
  <id>urn:{$row['domain']}</id>
  <summary>Pod Location is: {$row['country']}
	&#xA;
noplanman's avatar
noplanman committed
43
{$summary}</summary>
noplanman's avatar
noplanman committed
44 45 46
  <georss:point>{$row['lat']} {$row['long']}</georss:point>
  <georss:featureName>{$row['domain']}</georss:featureName>
</entry>
root's avatar
root committed
47

David Morley's avatar
fix api  
David Morley committed
48
EOF;
dmorley's avatar
cleanup  
dmorley committed
49
  }
50
  echo '</feed>';
noplanman's avatar
noplanman committed
51
} elseif ($_GET['format'] === 'json') {
52
  $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
53
  $result = pg_query($dbh, $sql);
54 55
  $result || die('Error in SQL query: ' . pg_last_error());

dmorley's avatar
cleanup  
dmorley committed
56 57
  //json output, thx Vipul A M for fixing this
  header('Content-type: application/json');
noplanman's avatar
noplanman committed
58 59 60 61 62 63 64 65

  $numrows = pg_num_rows($result);
  $rows    = array_values(pg_fetch_all($result));
  $obj     = [
    'podcount' => $numrows,
    'pods'     => $rows,
  ];
  if ($_GET['method'] === 'jsonp') {
dmorley's avatar
cleanup  
dmorley committed
66 67 68 69
    print $_GET['callback'] . '(' . json_encode($obj) . ')';
  } else {
    print json_encode($obj);
  }
70 71 72
} else {
  $i      = 0;
  $sql    = "SELECT * FROM pods WHERE hidden <> 'yes' ORDER BY uptimelast7 DESC";
dmorley's avatar
cleanup  
dmorley committed
73
  $result = pg_query($dbh, $sql);
74 75
  $result || die('Error in SQL query: ' . pg_last_error());

dmorley's avatar
cleanup  
dmorley committed
76 77
  $numrows = pg_num_rows($result);
  while ($row = pg_fetch_array($result)) {
noplanman's avatar
noplanman committed
78 79 80 81 82 83 84 85 86 87 88
//    $status = $row['status'] === 'up' ? 'Online' : 'Offline';
//    $scheme = $row['secure'] === 'true' ? 'https://' : 'http://';
//    $class  = $row['secure'] === 'true' ? 'green' : 'red';

    $i++ > 0 && print ',';
    printf(
      '%1$s Up %2$s%% This Month - Located in: %3$s',
      $row['domain'],
      $row['uptimelast7'],
      $row['country']
    );
89
  }
David Morley's avatar
fix api  
David Morley committed
90

91 92
  pg_free_result($result);
  pg_close($dbh);
root's avatar
root committed
93
}