tvdb_update.php 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  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. try {
  34. $episodes = $tvdb->getSerieEpisodes($id);
  35. } catch (Exception $e) {
  36. echo 'No such series: ' . $id . "\n";
  37. return false;
  38. }
  39. # DB init
  40. $dbh = new PDO(TVDB_DBN);
  41. $insert = $dbh->prepare(
  42. 'INSERT INTO episodes ("id", "season", "episode", "airdate", "name", "desc", "modified") ' .
  43. 'VALUES (:id, :season, :number, :airdate, :name, :desc, now())'
  44. );
  45. $update = $dbh->prepare(
  46. 'UPDATE episodes SET ' .
  47. 'airdate=:airdate, name=:name, "desc"=:desc, modified=now() ' .
  48. 'WHERE id=:id and season=:season and episode=:number'
  49. );
  50. # Update
  51. $error = 0;
  52. foreach ($episodes['episodes'] as $episode) {
  53. $airdate = null;
  54. if (is_object($episode->firstAired)) {
  55. $airdate = $episode->firstAired->format('c');
  56. } else if (DEBUG) {
  57. echo 'No airdate for: ' . $id . '::' . $episode->season . ':' . $episode->number . "\n";
  58. }
  59. $data = array(
  60. 'id' => $id,
  61. 'season' => $episode->season,
  62. 'number' => $episode->number,
  63. 'airdate' => $airdate,
  64. 'name' => $episode->name,
  65. 'desc' => $episode->overview
  66. );
  67. if (!tvdb_insert($insert, $update, $data)) {
  68. if (DEBUG) {
  69. print_r($dbh->errorInfo());
  70. }
  71. $err++;
  72. }
  73. }
  74. return ($err == 0);
  75. }
  76. function tvdb_series($id) {
  77. # Fetch series and episodes
  78. $tvdb = new Moinax\TvDb\Client(TVDB_URL, TVDB_API_KEY);
  79. try {
  80. $series = $tvdb->getSerie($id);
  81. } catch (Exception $e) {
  82. echo 'No such series: ' . $id . "\n";
  83. return false;
  84. }
  85. # DB init
  86. $dbh = new PDO(TVDB_DBN);
  87. $insert = $dbh->prepare(
  88. 'INSERT INTO series ("id", "name", "desc", "year", "modified") ' .
  89. 'VALUES (:id, :name, :desc, :year, now())'
  90. );
  91. $update = $dbh->prepare(
  92. 'UPDATE series SET ' .
  93. 'name=:name, "desc"=:desc, year=:year, modified=now()' .
  94. 'WHERE id=:id'
  95. );
  96. # Update
  97. $airdate = null;
  98. if (is_object($episode->firstAired)) {
  99. $airdate = $episode->firstAired->format('Y');
  100. } else if (DEBUG) {
  101. echo 'No airdate for: ' . $id . '::' . $series->name . "\n";
  102. }
  103. $data = array(
  104. 'id' => $id,
  105. 'name' => $series->name,
  106. 'desc' => $series->overview,
  107. 'year' => $airdate
  108. );
  109. if (!tvdb_insert($insert, $update, $data)) {
  110. if (DEBUG) {
  111. print_r($dbh->errorInfo());
  112. }
  113. return false;
  114. }
  115. return true;
  116. }
  117. function tvdb_insert($insert, $update, $data) {
  118. if (!$insert->execute($data) && !$update->execute($data)) {
  119. return false;
  120. }
  121. return true;
  122. }
  123. ?>