b2_test.ml 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  1. (* http://aantron.github.io/lambdasoup/ *)
  2. open Soup
  3. let test_soup () =
  4. let soup = "ausstrahlung-2601832.html" |> read_file |> parse in
  5. assert (
  6. "radioWelt"
  7. = (soup $ "html > head > meta[name=DCTERMS.title]" |> R.attribute "content"));
  8. assert (
  9. [ "Dienstag, 14.09.2021"; "06:05\nbis 08:30 Uhr" ]
  10. = (soup $ ".bcast_date" |> trimmed_texts));
  11. assert (
  12. "\nDienstag, 14.09.2021 06:05\nbis 08:30 Uhr\n"
  13. = (soup $ ".bcast_date" |> texts |> String.concat " "))
  14. let test_date () =
  15. let tz = Timedesc.Time_zone.make_exn "Europe/Zurich"
  16. and s = "Dienstag, 14.09.2021 06:05 bis 08:30 Uhr"
  17. and rx =
  18. Re.Pcre.regexp
  19. "([0-9]{2})\\.([0-9]{2})\\.([0-9]{4})[^0-9]+([0-9]{2}:[0-9]{2})[^0-9]+([0-9]{2}:[0-9]{2})"
  20. in
  21. let m = Re.exec rx s in
  22. assert (6 = Re.Group.nb_groups m);
  23. let g idx = Re.Group.get m idx in
  24. let d = Timedesc.Date.of_iso8601_exn (g 3 ^ "-" ^ g 2 ^ "-" ^ g 1)
  25. and t = Timedesc.Time.of_iso8601_exn (g 4) in
  26. let zl = Timedesc.Zoneless.make d t in
  27. let zo = Result.get_ok (Timedesc.Zoneless.to_zoned ~tz zl) in
  28. assert ("2021-09-14T06:05:00+02:00" = Option.get (Timedesc.to_rfc3339 zo))
  29. let test_make_identifier () =
  30. let of_rfc3339 str =
  31. match str |> Ptime.of_rfc3339 with
  32. | Ok (t, Some tz_s, _) -> (t, tz_s)
  33. | _ -> (Ptime.min, 0)
  34. in
  35. let t0 =
  36. ( ((2021, 9, 22), ((8, 30, 0), 7200)) |> Ptime.of_date_time |> Option.get,
  37. 7200 )
  38. and _ = "2021-09-22T08:30:00+02:00" |> of_rfc3339 in
  39. let to_id src = Lib.Br.make_identifier src t0 in
  40. assert (
  41. "b2/2021/09/22/0830"
  42. = to_id
  43. "https://www.br.de/radio/bayern2/programmkalender/ausstrahlung-2601832.html")
  44. let test_scrape_ausstrahlung_2601832 () =
  45. let bc = Lib.Br.scrape_str ("ausstrahlung-2601832.html" |> read_file) in
  46. assert ("Bayerischer Rundfunk" = bc.author);
  47. (* Printf.printf "%s\n" bc.description; *)
  48. assert (
  49. "Magazin am Morgen Kurz erklärt: So geriet Joachim Treiber ins Fadenkreuz \
  50. rechten Terrors Gespräch mit Joachim Treiber, Caritas Stuttgart: \
  51. Ausstellung \"Menschen - Im Fadenkreuz rechten Terrors\" Gespräch mit \
  52. Konstanze von Unold, Grundschulleiterin: erster Schultag im dritten \
  53. Corona-Schuljahr Zur Person: Peter Boehringer Gespräch mit Peter \
  54. Boehringer, Spitzenkandidat der AfD in Bayern für die Bundestagswahl \
  55. Schauspielerin Martina Gedeck wird 60 - ein Porträt Die Presse mit \
  56. Wolfram Schrag Gedanken zum Tag mit Uwe Böschemeyer Ende der Welt von \
  57. Georg Bayerle 6.30 / 7.30 Kurznachrichten, Wetter, Verkehr 7.00 / 8.00 \
  58. Nachrichten, Wetter, Verkehr 7.28 Werbung Ausgewählte Beiträge und \
  59. Interviews als Podcast und in der neuen Bayern 2 App verfügbar"
  60. = bc.description);
  61. assert ("b2/2021/09/14/0605" = bc.identifier);
  62. assert (
  63. "https://www.br.de/radio/bayern2/sendungen/radiowelt/moderation/stefan-kreutzer108~_v-img__16__9__xl_-d31c35f8186ebeb80b0cd843a7c267a0e0c81647.jpg?version=d4047"
  64. = bc.image);
  65. assert ("de" = bc.language);
  66. assert (
  67. "https://www.br.de/radio/bayern2/programmkalender/ausstrahlung-2601832.html"
  68. = bc.source);
  69. assert (
  70. "https://www.br.de/radio/bayern2/sendungen/radiowelt/index.html"
  71. = bc.subject);
  72. assert ("radioWelt" = bc.title);
  73. (* Printf.printf "%s\n" bc.title_episode; *)
  74. assert ("Moderation: Stefan Kreutzer" = bc.title_episode)
  75. let test_scrape_ausstrahlung_2609146 () =
  76. let bc = Lib.Br.scrape_str ("ausstrahlung-2609146.html" |> read_file) in
  77. assert ("b2/2021/09/24/1205" = bc.identifier);
  78. assert (
  79. "https://www.br.de/radio/bayern2/programmkalender/ausstrahlung-2609146.html"
  80. = bc.source);
  81. assert (
  82. "https://www.br.de/radio/bayern2/sendungen/tagesgespraech/index.html"
  83. = bc.subject);
  84. assert ("Tagesgespräch" = bc.title);
  85. (* Printf.printf "%s\n" bc.title_episode; *)
  86. assert (
  87. "70 Jahre Bundesverfassungsgericht: Welche Urteile waren besonders \
  88. wegweisend?" = bc.title_episode)
  89. let test_scrape_ausstrahlung_2609972 () =
  90. let bc = Lib.Br.scrape_str ("ausstrahlung-2609972.html" |> read_file) in
  91. assert ("Bayerischer Rundfunk" = bc.author);
  92. assert ("" = bc.title_episode)
  93. let test_scrape_ausstrahlung_2611380 () =
  94. let bc = Lib.Br.scrape_str ("ausstrahlung-2611380.html" |> read_file) in
  95. assert ("Impressum" = bc.title);
  96. assert ("" = bc.subject);
  97. assert ("" = bc.title_episode)
  98. let test_scrape_ausstrahlung_2611384 () =
  99. let bc = Lib.Br.scrape_str ("ausstrahlung-2611384.html" |> read_file) in
  100. assert ("BR-Heimatspiegel" = bc.title);
  101. assert (
  102. "https://www.br.de/radio/br-heimat/sendungen/heimatspiegel/index.html"
  103. = bc.subject);
  104. assert ("Mit Volksmusik gut in den Tag" = bc.title_episode)
  105. let test_scrape_ausstrahlung_2611450 () =
  106. let dur_iso ((t0, z0), (t1, z1)) =
  107. let s_per_m = 60 in
  108. "PT"
  109. ^ (z0 - z1
  110. + ((Ptime.diff t1 t0 |> Ptime.Span.to_int_s |> Option.get) / s_per_m)
  111. |> Int.to_string)
  112. ^ "M"
  113. and bc = Lib.Br.scrape_str ("ausstrahlung-2611450.html" |> read_file) in
  114. assert ("PT55M" = dur_iso (bc.timestart, bc.timeend));
  115. assert ("Mit Sabine Gietzelt" = bc.title_episode)
  116. let test_scrape_ausstrahlung_2612988 () =
  117. let bc = Lib.Br.scrape_str ("ausstrahlung-2612988.html" |> read_file) in
  118. (* Printf.printf "%s\n" bc.subject; *)
  119. assert (
  120. "https://www.br-klassik.de/programm/sendungen-a-z/ard-nachtkonzert-100.html"
  121. = bc.subject)
  122. let test_scrape_ausstrahlung_2645204 () =
  123. let bc = Lib.Br.scrape_str ("ausstrahlung-2645204.html" |> read_file) in
  124. (* Printf.printf "%s\n" bc.identifier; *)
  125. assert ("b5/2021/10/04/1813" = bc.identifier)
  126. let test_scrape_ausstrahlung_2647972 () =
  127. let bc = Lib.Br.scrape_str ("ausstrahlung-2647972.html" |> read_file) in
  128. (*
  129. Printf.printf "title: %s\n" bc.title;
  130. Printf.printf "episode: %s\n" bc.title_episode;
  131. Printf.printf "series: %s\n" bc.title_series;
  132. Printf.printf "id: %s\n" bc.identifier;
  133. *)
  134. assert ("Infoblock" = bc.title);
  135. assert (
  136. "Werbung nur zwischen 6.00 und 9.00, 12.00 und 13.00 sowie 17.00 und 18.00 \
  137. Uhr" = bc.title_series);
  138. assert ("" = bc.title_episode);
  139. assert ("b5/2021/10/07/0600" = bc.identifier)
  140. let test_scrape_ausstrahlung_2651390 () =
  141. let bc = Lib.Br.scrape_str ("ausstrahlung-2651390.html" |> read_file) in
  142. (* Printf.printf "%s\n" bc.identifier; *)
  143. assert ("puls/2021/10/12/0600" = bc.identifier)
  144. let test_scrape_ausstrahlung_2624044 () =
  145. let bc = Lib.Br.scrape_str ("ausstrahlung-2624044.html" |> read_file) in
  146. (* Printf.printf "%s\n" bc.identifier; *)
  147. assert ("b2/2021/10/23/0003" = bc.identifier)
  148. let test_scrape_ausstrahlung_2690002 () =
  149. let bc = Lib.Br.scrape_str ("ausstrahlung-2690002.html" |> read_file) in
  150. (* Printf.printf "%s\n" bc.title_episode; *)
  151. assert (
  152. "Weihnachtsansprache und Segen \"Urbi et Orbi\" von Papst Franziskus"
  153. = bc.title);
  154. assert ("Live vom Petersplatz in Rom" = bc.title_series);
  155. assert ("" = bc.title_episode);
  156. assert ("b1/2021/12/25/1200" = bc.identifier)
  157. let test_scrape_ausstrahlung_2648536 () =
  158. let bc = Lib.Br.scrape_str ("ausstrahlung-2648536.html" |> read_file) in
  159. (* Printf.printf "%s\n" bc.title_episode; *)
  160. assert ("radioWelt" = bc.title);
  161. assert ("" = bc.title_series);
  162. assert ("Moderation: Franziska Eder" = bc.title_episode);
  163. assert ("b2/2021/11/15/1705" = bc.identifier)
  164. let test_scrape_ausstrahlung_2725596 () =
  165. let bc = Lib.Br.scrape_str ("ausstrahlung-2725596.html" |> read_file) in
  166. (* Printf.printf "%s\n" bc.identifier; *)
  167. assert ("Der BR Schlager Treff" = bc.title);
  168. assert ("" = bc.title_series);
  169. assert ("" = bc.title_episode);
  170. assert ("b+/2021/11/22/1005" = bc.identifier)
  171. let test_scrape_ausstrahlung_2742652 () =
  172. let bc = "ausstrahlung-2742652.html" |> read_file |> Lib.Br.scrape_str in
  173. Assert2.equals_string "tit" "Nachrichten, Wetter" bc.title;
  174. Assert2.equals_string "id" "b2/2022/02/06/0200" bc.identifier
  175. let test_scrape_ausstrahlung_2807178 () =
  176. let bc = "ausstrahlung-2807178.html" |> read_file |> Lib.Br.scrape_str in
  177. Assert2.equals_string "tit" "Der BR Schlager Treff" bc.title;
  178. Assert2.equals_string "id" "b+/2022/03/24/1005" bc.identifier
  179. (*
  180. https://br.de//radio/bayern2/programmkalender/ausstrahlung-2742652.html
  181. https://br.de//radio/bayern2/programmkalender/ausstrahlung-2742656.html
  182. https://br.de//radio/br-schlager/programmkalender/ausstrahlung-2742774.html
  183. https://br.de//radio/br-schlager/programmkalender/ausstrahlung-2742772.html
  184. https://br.de//radio/br24/programmkalender/ausstrahlung-2768756.html
  185. https://br.de//radio/br24/programmkalender/ausstrahlung-2768754.html
  186. https://br.de//radio/br24/programmkalender/ausstrahlung-2768764.html
  187. https://br.de//radio/br24/programmkalender/ausstrahlung-2768760.html
  188. https://br.de//radio/br24/programmkalender/ausstrahlung-2768762.html
  189. https://br.de//radio/br24/programmkalender/ausstrahlung-2768758.html
  190. https://br.de//radio/br24/programmkalender/ausstrahlung-2768778.html
  191. https://br.de//radio/br24/programmkalender/ausstrahlung-2768766.html
  192. https://br.de//radio/br24/programmkalender/ausstrahlung-2768770.html
  193. https://br.de//radio/br24/programmkalender/ausstrahlung-2768756.html
  194. https://br.de//radio/bayern1/programmkalender/ausstrahlung-2742610.html
  195. https://br.de//radio/br-schlager/programmkalender/ausstrahlung-2742772.html
  196. https://br.de//radio/br24/programmkalender/ausstrahlung-2768794.html
  197. https://br.de//radio/br24/programmkalender/ausstrahlung-2768790.html
  198. https://br.de//radio/br24/programmkalender/ausstrahlung-2768788.html
  199. https://br.de//radio/bayern2/programmkalender/ausstrahlung-2742672.html
  200. https://br.de//radio/bayern2/programmkalender/ausstrahlung-2742674.html
  201. https://br.de//radio/bayern2/programmkalender/ausstrahlung-2742678.html
  202. https://br.de//radio/br-heimat/programmkalender/ausstrahlung-2729662.html
  203. https://br.de//radio/br-heimat/programmkalender/ausstrahlung-2729672.html
  204. https://br.de//radio/bayern2/programmkalender/ausstrahlung-2742684.html
  205. https://br.de//puls/programm/puls-radio/programmkalender/ausstrahlung-2762402.html
  206. *)
  207. let test_foo () = assert true
  208. let () =
  209. Unix.chdir "../../../test/";
  210. test_soup ();
  211. test_date ();
  212. test_make_identifier ();
  213. test_scrape_ausstrahlung_2601832 ();
  214. test_scrape_ausstrahlung_2609146 ();
  215. test_scrape_ausstrahlung_2609972 ();
  216. test_scrape_ausstrahlung_2611380 ();
  217. test_scrape_ausstrahlung_2611384 ();
  218. test_scrape_ausstrahlung_2611450 ();
  219. test_scrape_ausstrahlung_2612988 ();
  220. test_scrape_ausstrahlung_2645204 ();
  221. test_scrape_ausstrahlung_2647972 ();
  222. test_scrape_ausstrahlung_2651390 ();
  223. test_scrape_ausstrahlung_2624044 ();
  224. test_scrape_ausstrahlung_2690002 ();
  225. test_scrape_ausstrahlung_2648536 ();
  226. test_scrape_ausstrahlung_2725596 ();
  227. test_scrape_ausstrahlung_2742652 ();
  228. test_scrape_ausstrahlung_2807178 ();
  229. test_foo ()