151 fix youtube channel embed (#173)

* Fixes embeds for youtube channels

* Tests for youtube extract meta

* lint
This commit is contained in:
Aryan Goharzad
2023-02-08 14:04:54 -05:00
committed by GitHub
parent 6ffc92db09
commit 9aca0d4632
3 changed files with 35 additions and 8 deletions
@@ -1,4 +1,4 @@
export const youtubeHTML = ` export const youtubeChannelHtml = `
<!DOCTYPE html><html style="font-size: 10px;font-family: Roboto, Arial, sans-serif;" lang="en" dark system-icons typography typography-spacing darker-dark-theme darker-dark-theme-deprecate><head><meta http-equiv="origin-trial" content="AlgsH67ctYlMR3JYAxEnGfvsoFo41AMqAg6wRHHXOpWAfD54ZCfTPBclxnFT4Gc8IUX4pq6Xfo0esDuOt+WH3wIAAABteyJvcmlnaW4iOiJodHRwczovL3lvdXR1YmUuY29tOjQ0MyIsImZlYXR1cmUiOiJQcml2YWN5U2FuZGJveEFkc0FQSXMiLCJleHBpcnkiOjE2ODA2NTI3OTksImlzU3ViZG9tYWluIjp0cnVlfQ=="/><script nonce="nopnosk9VoEiau3Xtg_3uQ">var ytcfg={d:function(){return window.yt&&yt.config_||ytcfg.data_||(ytcfg.data_={})},get:function(k,o){return k in ytcfg.d()?ytcfg.d()[k]:o},set:function(){var a=arguments;if(a.length>1)ytcfg.d()[a[0]]=a[1];else for(var k in a[0])ytcfg.d()[k]=a[0][k]}}; <!DOCTYPE html><html style="font-size: 10px;font-family: Roboto, Arial, sans-serif;" lang="en" dark system-icons typography typography-spacing darker-dark-theme darker-dark-theme-deprecate><head><meta http-equiv="origin-trial" content="AlgsH67ctYlMR3JYAxEnGfvsoFo41AMqAg6wRHHXOpWAfD54ZCfTPBclxnFT4Gc8IUX4pq6Xfo0esDuOt+WH3wIAAABteyJvcmlnaW4iOiJodHRwczovL3lvdXR1YmUuY29tOjQ0MyIsImZlYXR1cmUiOiJQcml2YWN5U2FuZGJveEFkc0FQSXMiLCJleHBpcnkiOjE2ODA2NTI3OTksImlzU3ViZG9tYWluIjp0cnVlfQ=="/><script nonce="nopnosk9VoEiau3Xtg_3uQ">var ytcfg={d:function(){return window.yt&&yt.config_||ytcfg.data_||(ytcfg.data_={})},get:function(k,o){return k in ytcfg.d()?ytcfg.d()[k]:o},set:function(){var a=arguments;if(a.length>1)ytcfg.d()[a[0]]=a[1];else for(var k in a[0])ytcfg.d()[k]=a[0][k]}};
window.ytcfg.set('EMERGENCY_BASE_URL', '\/error_204?t\x3djserror\x26level\x3dERROR\x26client.name\x3d1\x26client.version\x3d2.20230201.01.00');</script><script nonce="nopnosk9VoEiau3Xtg_3uQ">(function(){window.yterr=window.yterr||true;window.unhandledErrorMessages={};window.unhandledErrorCount=0; window.ytcfg.set('EMERGENCY_BASE_URL', '\/error_204?t\x3djserror\x26level\x3dERROR\x26client.name\x3d1\x26client.version\x3d2.20230201.01.00');</script><script nonce="nopnosk9VoEiau3Xtg_3uQ">(function(){window.yterr=window.yterr||true;window.unhandledErrorMessages={};window.unhandledErrorCount=0;
+7 -5
View File
@@ -2,6 +2,7 @@ import {extractHtmlMeta} from '../../src/lib/extractHtmlMeta'
import {exampleComHtml} from './__mocks__/exampleComHtml' import {exampleComHtml} from './__mocks__/exampleComHtml'
import {youtubeHTML} from './__mocks__/youtubeHtml' import {youtubeHTML} from './__mocks__/youtubeHtml'
import {tiktokHtml} from './__mocks__/tiktokHtml' import {tiktokHtml} from './__mocks__/tiktokHtml'
import {youtubeChannelHtml} from './__mocks__/youtubeChannelHtml'
describe('extractHtmlMeta', () => { describe('extractHtmlMeta', () => {
const cases = [ const cases = [
@@ -69,7 +70,7 @@ describe('extractHtmlMeta', () => {
expect(output).toEqual(expectedOutput) expect(output).toEqual(expectedOutput)
}) })
it.only('extracts title and description from a generic youtube page', () => { it('extracts title and description from a generic youtube page', () => {
const input = youtubeHTML const input = youtubeHTML
const expectedOutput = { const expectedOutput = {
title: 'HD Video (1080p) with Relaxing Music of Native American Shamans', title: 'HD Video (1080p) with Relaxing Music of Native American Shamans',
@@ -81,13 +82,14 @@ describe('extractHtmlMeta', () => {
expect(output).toEqual(expectedOutput) expect(output).toEqual(expectedOutput)
}) })
it.only('extracts avatar from a youtube channel', () => { it('extracts avatar from a youtube channel', () => {
const input = youtubeHTML const input = youtubeChannelHtml
const expectedOutput = { const expectedOutput = {
title: 'penguinz0', title: 'penguinz0',
description: description:
"Clips channel: https://www.youtube.com/channel/UC4EQHfzIbkL_Skit_iKt1aA\n\nTwitter: https://twitter.com/MoistCr1TiKaL\n\nInstagram: https://www.instagram.com/bigmoistcr1tikal/?hl=en\n\nTwitch: https://www.twitch.tv/moistcr1tikal\n\nSnapchat: Hugecharles\n\nTik Tok: Hugecharles\n\nI don't have any other public accounts.", 'Clips channel: https://www.youtube.com/channel/UC4EQHfzIbkL_Skit_iKt1aA\n\nTwitter: https://twitter.com/MoistCr1TiKaL\n\nInstagram: https://www.instagram.com/bigmoistcr1tikal/?hl=en\n\nTwitch: https://www.twitch.tv/moistcr1tikal\n\nSnapchat: Hugecharles\n\nTik Tok: Hugecharles\n\nI don&#39;t have any other public accounts.',
image: 'https://i.ytimg.com/vi/x6UITRjhijI/sddefault.jpg', image:
'https://yt3.googleusercontent.com/ytc/AL5GRJWOhJOuUC6C2b7gP-5D2q6ypXbcOOckyAE1En4RUQ=s176-c-k-c0x00ffffff-no-rj',
} }
const output = extractHtmlMeta({html: input, hostname: 'youtube.com'}) const output = extractHtmlMeta({html: input, hostname: 'youtube.com'})
expect(output).toEqual(expectedOutput) expect(output).toEqual(expectedOutput)
+27 -2
View File
@@ -78,8 +78,14 @@ describe('downloadAndResize', () => {
}) })
it('should return undefined for unsupported file type', async () => { it('should return undefined for unsupported file type', async () => {
const mockedFetch = RNFetchBlob.fetch as jest.Mock
mockedFetch.mockResolvedValueOnce({
path: jest.fn().mockReturnValue('file://downloaded-image'),
flush: jest.fn(),
})
const opts: DownloadAndResizeOpts = { const opts: DownloadAndResizeOpts = {
uri: 'https://example.com/image.bmp', uri: 'https://example.com/image',
width: 100, width: 100,
height: 100, height: 100,
maxSize: 500000, maxSize: 500000,
@@ -88,6 +94,25 @@ describe('downloadAndResize', () => {
} }
const result = await downloadAndResize(opts) const result = await downloadAndResize(opts)
expect(result).toBeUndefined() expect(result).toEqual(mockResizedImage)
expect(RNFetchBlob.config).toHaveBeenCalledWith({
fileCache: true,
appendExt: 'jpeg',
})
expect(RNFetchBlob.fetch).toHaveBeenCalledWith(
'GET',
'https://example.com/image',
)
expect(ImageResizer.createResizedImage).toHaveBeenCalledWith(
'file://downloaded-image',
100,
100,
'JPEG',
100,
undefined,
undefined,
undefined,
{mode: 'cover'},
)
}) })
}) })