Преглед изворни кода

experimental fix for carousel videos

Mike L пре 4 година
родитељ
комит
270618d667
8 измењених фајлова са 31 додато и 103 уклоњено
  1. 0 1
      dist/twitter.js
  2. 0 29
      dist/twitter_test.js
  3. 7 6
      dist/webshot.js
  4. 0 6
      dist/webshot_test.js
  5. 0 1
      src/twitter.ts
  6. 0 33
      src/twitter_test.js
  7. 24 17
      src/webshot.ts
  8. 0 10
      src/webshot_test.js

+ 0 - 1
dist/twitter.js

@@ -220,7 +220,6 @@ class default_1 {
                 }
             });
             promise.then((mediaItems) => {
-                logger.debug(`api returned ${JSON.stringify(mediaItems)} for feed ${currentFeed}`);
                 const currentThread = lock.threads[currentFeed];
                 const updateDate = () => currentThread.updatedAt = new Date().toString();
                 if (!mediaItems || mediaItems.length === 0) {

+ 0 - 29
dist/twitter_test.js

@@ -1,29 +0,0 @@
-"use strict";
-Object.defineProperty(exports, "__esModule", { value: true });
-const path = require("path");
-const twitter_1 = require("./twitter");
-const webshot_1 = require("./webshot");
-const configPath = './config.json';
-let config, worker;
-try {
-    config = require(path.resolve(configPath));
-    worker = new twitter_1.default(Object.fromEntries(Object.entries(config).map(([k, v]) => [k.replace('twitter_', '').replace(/_(.)/g, (_, $1) => $1.toUpperCase()), v])));
-}
-catch (e) {
-    console.log('Failed to parse config file: ', configPath);
-    process.exit(1);
-}
-const webshot = new webshot_1.default(config.playwright_ws_spec_endpoint, worker.mode, () => {
-    worker.webshot = webshot;
-    worker.getTweet('1296935552848035840', (msg, text, author) => {
-        console.log(author + text);
-        console.log(JSON.stringify(msg));
-    }).catch(console.log);
-    worker.getTweet('1296935552848035841', (msg, text, author) => {
-        console.log(author + text);
-        console.log(JSON.stringify(msg));
-    }).catch(console.log);
-});
-worker.queryUser('tomoyokurosawa').then(console.log).catch(console.log);
-worker.queryUser('tomoyourosawa').then(console.log).catch(console.log);
-worker.queryUser('@tomoyokurosawa').then(console.log).catch(console.log);

+ 7 - 6
dist/webshot.js

@@ -220,10 +220,10 @@ class Webshot extends CallableInstance {
                         messageChain += msg;
                 });
             }
-            const mediaType = item.video_versions ? 'video' : 'photo';
-            const fetchBestCandidate = (candidates) => {
+            const type = (mediaItem) => mediaItem.video_versions ? 'video' : 'photo';
+            const fetchBestCandidate = (candidates, mediaType) => {
                 const url = candidates
-                    .sort((var1, var2) => var2.width - var1.width)
+                    .sort((var1, var2) => var2.width + ((var2 === null || var2 === void 0 ? void 0 : var2.type) || 0) - var1.width - ((var1 === null || var1 === void 0 ? void 0 : var1.type) || 0))
                     .map(variant => variant.url)[0];
                 const altMessage = `\n[失败的${typeInZH[mediaType].type}:${url}]`;
                 return this.fetchMedia(url)
@@ -236,13 +236,14 @@ class Webshot extends CallableInstance {
             if (1 - this.mode % 2)
                 promise = promise.then(() => {
                     if (item.carousel_media) {
-                        return utils_1.chainPromises(item.carousel_media.map(carouselItem => fetchBestCandidate(carouselItem.image_versions2.candidates)));
+                        return utils_1.chainPromises(item.carousel_media.map(carouselItem => fetchBestCandidate(carouselItem.video_versions ||
+                            carouselItem.image_versions2.candidates, type(carouselItem))));
                     }
                     else if (item.video_versions) {
-                        return fetchBestCandidate(item.video_versions);
+                        return fetchBestCandidate(item.video_versions, type(item));
                     }
                     else if (item.image_versions2) {
-                        return fetchBestCandidate(item.image_versions2.candidates);
+                        return fetchBestCandidate(item.image_versions2.candidates, type(item));
                     }
                 });
             promise.then(() => {

Разлика између датотеке није приказан због своје велике величине
+ 0 - 6
dist/webshot_test.js


+ 0 - 1
src/twitter.ts

@@ -330,7 +330,6 @@ export default class {
     });
 
     promise.then((mediaItems: MediaItem[]) => {
-      logger.debug(`api returned ${JSON.stringify(mediaItems)} for feed ${currentFeed}`);
       const currentThread = lock.threads[currentFeed];
 
       const updateDate = () => currentThread.updatedAt = new Date().toString();

+ 0 - 33
src/twitter_test.js

@@ -1,33 +0,0 @@
-import * as path from 'path';
-
-import Worker from './twitter';
-import Webshot from './webshot';
-
-const configPath = './config.json';
-
-let config, worker;
-try {
-  config = require(path.resolve(configPath));
-  worker = new Worker(
-    Object.fromEntries(Object.entries(config).map(
-      ([k, v]) => [k.replace('twitter_', '').replace(/_(.)/g, (_, $1) => $1.toUpperCase()), v]
-    ))
-  );
-} catch (e) {
-  console.log('Failed to parse config file: ', configPath);
-  process.exit(1);
-}
-const webshot = new Webshot(config.playwright_ws_spec_endpoint, worker.mode, () => {
-  worker.webshot = webshot;
-  worker.getTweet('1296935552848035840', (msg, text, author) => {
-    console.log(author + text);
-    console.log(JSON.stringify(msg));
-  }).catch(console.log);
-  worker.getTweet('1296935552848035841', (msg, text, author) => {
-    console.log(author + text);
-    console.log(JSON.stringify(msg));
-  }).catch(console.log);
-});
-worker.queryUser('tomoyokurosawa').then(console.log).catch(console.log);
-worker.queryUser('tomoyourosawa').then(console.log).catch(console.log);
-worker.queryUser('@tomoyokurosawa').then(console.log).catch(console.log);

+ 24 - 17
src/webshot.ts

@@ -247,31 +247,38 @@ class Webshot extends CallableInstance<[MediaItem[], (...args) => void, number],
           });
       }
       // fetch extra entities
-      const mediaType: keyof typeof typeInZH = item.video_versions ? 'video' : 'photo';
-      const fetchBestCandidate =
-        (candidates: typeof item.video_versions | typeof item.image_versions2.candidates) => {
-          const url = candidates
-            .sort((var1, var2) => var2.width - var1.width)
-            .map(variant => variant.url)[0]; // largest media
-          const altMessage = `\n[失败的${typeInZH[mediaType].type}:${url}]`;
-          return this.fetchMedia(url)
-            .catch(error => {
-              logger.warn('unable to fetch media, sending plain text instead...');
-              return altMessage;
-            })
-            .then(msg => { messageChain += msg; });
-        };
+      const type = (mediaItem): keyof typeof typeInZH =>
+        (mediaItem as MediaItem).video_versions ? 'video' : 'photo';
+      const fetchBestCandidate =(
+        candidates: (Partial<typeof item.video_versions[0]> & typeof item.image_versions2.candidates[0])[],
+        mediaType: keyof typeof typeInZH
+      ) => {
+        const url = candidates
+          .sort((var1, var2) => var2.width + (var2?.type || 0) - var1.width - (var1?.type || 0))
+          .map(variant => variant.url)[0]; // largest media
+        const altMessage = `\n[失败的${typeInZH[mediaType].type}:${url}]`;
+        return this.fetchMedia(url)
+          .catch(error => {
+            logger.warn('unable to fetch media, sending plain text instead...');
+            return altMessage;
+          })
+          .then(msg => { messageChain += msg; });
+      };
       // tslint:disable-next-line: curly
       // eslint-disable-next-line curly
       if (1 - this.mode % 2) promise = promise.then(() => {
         if (item.carousel_media) {
           return chainPromises(item.carousel_media.map(carouselItem =>
-            fetchBestCandidate(carouselItem.image_versions2.candidates)
+            fetchBestCandidate(
+              (carouselItem as unknown as MediaItem).video_versions || 
+              carouselItem.image_versions2.candidates,
+              type(carouselItem)
+            )
           ));
         } else if (item.video_versions) {
-          return fetchBestCandidate(item.video_versions);
+          return fetchBestCandidate(item.video_versions, type(item));
         } else if (item.image_versions2) {
-          return fetchBestCandidate(item.image_versions2.candidates);
+          return fetchBestCandidate(item.image_versions2.candidates, type(item));
         }
       });
       promise.then(() => {

Разлика између датотеке није приказан због своје велике величине
+ 0 - 10
src/webshot_test.js


Неке датотеке нису приказане због велике количине промена