tvdb_update.php 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. <?php
  2. require_once('includes/main.php');
  3. require_once('includes/tvdb/init.php');
  4. function tvdb_lastModified($id) {
  5. # DB init
  6. $dbh = new PDO(TVDB_DBN);
  7. $select = $dbh->prepare('SELECT modified FROM series WHERE id=:id');
  8. # Query
  9. $select->execute(array('id' => $id));
  10. $result = $select->fetch(PDO::FETCH_ASSOC);
  11. # Cast as a datetime
  12. $time = 0;
  13. if ($result && is_array($result) && $result['modified']) {
  14. $time = strtotime($result['modified']);
  15. }
  16. return $time;
  17. }
  18. function tvdb_update($id, $force = false) {
  19. if (!$force) {
  20. $modified = tvdb_lastModified($id);
  21. if (time() - $modified < TVDB_UPDATE_TIMEOUT) {
  22. if (DEBUG) {
  23. echo 'Skipping due to recent update: ' . $id . "\n";
  24. }
  25. return true;
  26. }
  27. }
  28. return (tvdb_series($id) && tvdb_episodes($id));
  29. }
  30. function tvdb_episodes($id) {
  31. # Fetch
  32. $tvdb = new Moinax\TvDb\Client(TVDB_URL, TVDB_API_KEY);
  33. $episodes = $tvdb->getSerieEpisodes($id);
  34. # DB init
  35. $dbh = new PDO(TVDB_DBN);
  36. $insert = $dbh->prepare(
  37. 'INSERT INTO episodes ("id", "season", "episode", "airdate", "name", "desc", "modified") ' .
  38. 'VALUES (:id, :season, :number, :airdate, :name, :desc, now())'
  39. );
  40. $update = $dbh->prepare(
  41. 'UPDATE episodes SET ' .
  42. 'airdate=:airdate, name=:name, "desc"=:desc, modified=now() ' .
  43. 'WHERE id=:id and season=:season and episode=:number'
  44. );
  45. # Update
  46. $error = 0;
  47. foreach ($episodes['episodes'] as $episode) {
  48. $airdate = null;
  49. if (is_object($episode->firstAired)) {
  50. $airdate = $episode->firstAired->format('c');
  51. } else if (DEBUG) {
  52. echo 'No airdate for: ' . $id . '::' . $episode->season . ':' . $episode->number . "\n";
  53. }
  54. $data = array(
  55. 'id' => $id,
  56. 'season' => $episode->season,
  57. 'number' => $episode->number,
  58. 'airdate' => $airdate,
  59. 'name' => $episode->name,
  60. 'desc' => $episode->overview
  61. );
  62. if (!tvdb_insert($insert, $update, $data)) {
  63. if (DEBUG) {
  64. print_r($dbh->errorInfo());
  65. }
  66. $err++;
  67. }
  68. }
  69. return ($err == 0);
  70. }
  71. function tvdb_series($id) {
  72. # Fetch series and episodes
  73. $tvdb = new Moinax\TvDb\Client(TVDB_URL, TVDB_API_KEY);
  74. $series = $tvdb->getSerie($id);
  75. # DB init
  76. $dbh = new PDO(TVDB_DBN);
  77. $insert = $dbh->prepare(
  78. 'INSERT INTO series ("id", "name", "desc", "year", "modified") ' .
  79. 'VALUES (:id, :name, :desc, :year, now())'
  80. );
  81. $update = $dbh->prepare(
  82. 'UPDATE series SET ' .
  83. 'name=:name, "desc"=:desc, year=:year, modified=now()' .
  84. 'WHERE id=:id'
  85. );
  86. # Update
  87. $data = array(
  88. 'id' => $id,
  89. 'name' => $series->name,
  90. 'desc' => $series->overview,
  91. 'year' => $series->firstAired->format('Y')
  92. );
  93. if (!tvdb_insert($insert, $update, $data)) {
  94. if (DEBUG) {
  95. print_r($dbh->errorInfo());
  96. }
  97. return false;
  98. }
  99. return true;
  100. }
  101. function tvdb_insert($insert, $update, $data) {
  102. if (!$insert->execute($data) && !$update->execute($data)) {
  103. return false;
  104. }
  105. return true;
  106. }
  107. ?>