Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(510)

Side by Side Diff: scripts/gen_dartisans_playlist.dart

Issue 11577007: generate dartisans from playlist, keep everything up to date (Closed) Base URL: git@github.com:dart-lang/dartlang.org.git@master
Patch Set: use the right yaml Created 8 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 import 'dart:json';
2 import 'dart:io';
3 import 'dart:uri';
4
5 final String YT_PLAYLIST_URL = 'http://gdata.youtube.com/feeds/api/playlists/';
6 final String PLAYLIST_ID = 'PLOU2XLYxmsIIS2zgjdmBEwTrA6m5YgHBs';
7
8 final String OUTPUT_FILENAME = 'src/site/dartisans/episodes.yaml';
9
10 Future<String> loadDartisansPlaylist() {
11 var completer = new Completer();
12 var client = new HttpClient();
13 var conn = client.getUrl(new Uri('$YT_PLAYLIST_URL$PLAYLIST_ID?alt=json'));
14 conn.onResponse = (HttpClientResponse resp) {
15 var buffer = new StringBuffer();
16 var input = resp.inputStream;
17 input.onData = () => buffer.add(new String.fromCharCodes(input.read()));
18 input.onClosed = () {
19 print('Done loading JSON from API');
20 client.shutdown(); // XXX do this or the app remains running
21 completer.complete(buffer.toString());
22 };
23 input.onError = (e) {
24 completer.completeException("ERROR reading from input: $e");
25 };
26 };
27 conn.onError = (e) {
28 completer.completeException("ERROR CONNECTING TO YT: $e");
29 };
30 return completer.future;
31 }
32
33 Map parsePlaylistJson(String json) => JSON.parse(json);
34
35 writePlaylistYaml(Directory directory, Map playlist) {
36 var episodeOffset = 2;
37 var file = new File('${directory.path}/../$OUTPUT_FILENAME');
38 var output = file.openOutputStream();
39 output.writeString("""
40 url-prefix: http://commondatastorage.googleapis.com/dartlang-podcast/
41 episodes:
42 """);
43 var entries = playlist['feed']['entry'];
44 for (var i = 0; i < entries.length; i++) {
45 var epNum = entries.length - i + episodeOffset;
46 writeEntry(output, entries[i], epNum);
47 }
48 output.close();
49 }
50
51 writeEntry(OutputStream out, Map entry, int epNum) {
52 String playerUrl = entry[r'media$group'][r'media$player'][0]['url'];
53 String youtubeId = new RegExp("v=(.*)&").firstMatch(playerUrl)[1];
54 String title = entry['title'][r'$t'];
55 String subtitle;
56 Match match = new RegExp(r": (.*)$").firstMatch(title);
57 if (match == null) {
58 print("Title '$title' does not have a :");
59 return;
60 } else {
61 subtitle = match[1];
62 }
63 String thumbnail = entry[r'media$group'][r'media$thumbnail'][0]['url'];
64 String recorded;
65 if (entry[r'yt$recorded'] == null) {
66 print("No explicit recorded date for $title. Please set.");
67 return;
68 } else {
69 recorded = entry[r'yt$recorded'][r'$t'];
70 }
71 String desc = entry['content'][r'$t']
72 .replaceAll("\n", ' ')
73 .replaceAll('"', "'");
74
75 out.writeString("""
76 - title: "${title}"
77 subtitle: "${subtitle}"
78 # file: unknown.mp3
79 pubdate: ${recorded}
80 description: "${desc}"
81 # length: 21815187
82 num: $epNum
83 youtubeid: $youtubeId
84 thumbnail: $thumbnail
85 """);
86 }
87
88 main() {
89 var script = new File(new Options().script);
90 var directory = script.directorySync();
91
92 loadDartisansPlaylist()
93 .then((String json) {
94 Map data = parsePlaylistJson(json);
95 writePlaylistYaml(directory, data);
96 print("Complete!");
97 });
98 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698