Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- {"X.COM-h-p":{"useimg":1,"link":"^(?:m(?:obile)?\\.)?(?:x|(api\\.[fv]x)?twitter)\\.com/(?:[^/]+/)*status/(\\d+)(?:\\?img_id/(.+))?.*","url":": (()=>{const use_on_timestamp = true , use_account_token = true , n=this.node;if(/^https:\\/\\/platform\\.twitter/.test(n.baseURI)||/^(?:x|twitter)\\.com$/.test(location.hostname)&&!RegExp(`^(?:svg|path${use_on_timestamp?'|time':''})$`).test(n.localName)&&!n.IMGS_TRG)throw '';return use_account_token&&!$[1]&&location.hostname==='x.com'&&/\\bct0=/.test(document.cookie)?'data:,'+$[2]+$[3]:$[1]||!$[2]?$[0]:'https://cdn.syndication.twimg.com/tweet-result?id='+$[2]+'&token='+((Number($[2])/1e15)*Math.PI).toString(6**2).replace(/(0+|\\.)/g,'')+($[3]?'&'+$[3]:'')})()","res":":\n// To have the sieve work on media from private accounts, change 'use_account_token' in the above text box to true. When logged in, the sieve will use the token when requesting the media data file.\n\nconst config = {\n // Edit these variables to change how the sieve shows media\n\n show_thumbs_as_album: true, // Multi-image posts show images as an album\n\n show_pfp_if_no_media: false, // Show profile image instead of 'No Media' message\n\n use_vxtwitter_api_fallback: true, // Use third party API VXTwitter as backup\n\n use_fxtwitter_api_fallback: true, // Use third party API FXTwitter as backup\n\n // If both VXTwitter and FXTwitter are set to true, one is randomly chosen\n\n hide_third_party_api_message: false // Remove third party API caption message\n}\n\nconst filename = $[0].match(/^https:\\/\\/[^\\/]+\\/([^\\/]+)\\/status\\/(\\d+).*/);\nif(filename)this.CNT.filename = filename[1]+'-'+filename[2];\n\nif($.base[0]==='d'){\nconst token = document.cookie.match(/\\bct0=([^;]+)/)?.[1], lang = document.cookie.match(/\\blang=([^;]+)/)?.[1], x = new XMLHttpRequest();\nif(!token)return '';\nx.open('GET',`https://x.com/i/api/graphql/nBS-WpgA6ZG0CyNHD517JQ/TweetDetail?variables=%7B%22focalTweetId%22:%22${$[2]}%22,%22with_rux_injections%22:false,%22rankingMode%22:%22Relevance%22,%22includePromotedContent%22:false,%22withCommunity%22:false,%22withQuickPromoteEligibilityTweetFields%22:false,%22withBirdwatchNotes%22:false,%22withVoice%22:false%7D&features=%7B%22rweb_tipjar_consumption_enabled%22:false,%22responsive_web_graphql_exclude_directive_enabled%22:false,%22verified_phone_label_enabled%22:false,%22creator_subscriptions_tweet_preview_api_enabled%22:false,%22responsive_web_graphql_timeline_navigation_enabled%22:false,%22responsive_web_graphql_skip_user_profile_image_extensions_enabled%22:false,%22communities_web_enable_tweet_community_results_fetch%22:false,%22c9s_tweet_anatomy_moderator_badge_enabled%22:false,%22articles_preview_enabled%22:false,%22responsive_web_edit_tweet_api_enabled%22:false,%22graphql_is_translatable_rweb_tweet_is_translatable_enabled%22:false,%22view_counts_everywhere_api_enabled%22:false,%22longform_notetweets_consumption_enabled%22:false,%22responsive_web_twitter_article_tweet_consumption_enabled%22:false,%22tweet_awards_web_tipping_enabled%22:false,%22creator_subscriptions_quote_tweet_preview_enabled%22:false,%22freedom_of_speech_not_reach_fetch_enabled%22:false,%22standardized_nudges_misinfo%22:false,%22tweet_with_visibility_results_prefer_gql_limited_actions_policy_enabled%22:false,%22rweb_video_timestamps_enabled%22:false,%22longform_notetweets_rich_text_read_enabled%22:false,%22longform_notetweets_inline_media_enabled%22:false,%22responsive_web_enhance_cards_enabled%22:false%7D`,false);\nx.setRequestHeader('authorization','Bearer AAAAAAAAAAAAAAAAAAAAANRILgAAAAAAnNwIzUejRCOuH5E6I8xnZz4puTs%3D1Zv7ttfk8LF81IUq16cHjhLTvJu4FA33AGWWjCpTnA');\nx.setRequestHeader('content-type','application/json');\nx.setRequestHeader('x-twitter-client-language',lang);\nx.setRequestHeader('x-csrf-token',token);\nx.send();\nif(x.status!==200)return '';\n$._=x.responseText;\n}\nlet data = $._[0]==='{'&&JSON.parse($._);\nif(!data)return null;\nlet qtData = data.data?.threaded_conversation_with_injections_v2?.instructions?.[0]?.entries?.find(i=>i.entryId==='tweet-'+$[2])?.content?.itemContent?.tweet_results?.result?.quoted_status_result?.result || data.quoted_tweet;\ndata = data.data?.threaded_conversation_with_injections_v2?.instructions?.[0]?.entries?.find(i=>i.entryId==='tweet-'+$[2])?.content?.itemContent?.tweet_results?.result || data;\ndata = data.tweet || data;\nqtData = qtData?.tweet || qtData;\nconst upgradeImage = img => ['#'+img.replace(/\\.([a-z0-9]{3,4}$)/,'?format=$1&name=orig').replace('webp','jpg'), '#'+img.replace(/\\.([a-z0-9]{3,4}$)/,'?format=$1&name=orig').replace('webp','png'), img.replace(/\\.([a-z0-9]{3,4}$)/,'?format=$1&name=large').replace('webp','jpg'), img.replace(/\\.([a-z0-9]{3,4}$)/,'?format=$1&name=large').replace('webp','png')];\nlet idx, media = [];\nconst imgIdRegex = new RegExp(`${$[3]}`), pfp = (data.user||data.core?.user_results?.result?.legacy)?.profile_image_url_https?.replace(/_[a-z0-9]+\\./, '.'), backupURL = config.use_fxtwitter_api_fallback&&config.use_vxtwitter_api_fallback ? ['v', 'f'][Math.floor(Math.random()*2)] : config.use_vxtwitter_api_fallback ? 'v' : config.use_fxtwitter_api_fallback ? 'f' : '';\nif(!$[1]){\nconst text = data.text||data.legacy?.full_text||'', qtText = qtData?.text||qtData?.legacy?.full_text||'';\nlet mediaDetails = data.mediaDetails||data.legacy?.entities?.media||[], qtMediaDetails = qtData?.mediaDetails||qtData?.legacy?.entities?.media||[], card = data.card?.legacy?.binding_values||data.card?.binding_values?.unified_card?.string_value||data.card?.binding_values;\nif(!$[3]){\nif(mediaDetails)mediaDetails.forEach(i => {\n\tconst isVideo = i.video_info ? true : false;\n\ti = isVideo ? i?.video_info?.variants.filter(i=>i.content_type==='video/mp4').sort((a,b)=>b.bitrate-a.bitrate).map(i=>i.url) : i.media_url_https;\n\tmedia.push(isVideo ? [['#'+i[0],i?.[1]||''],(qtMediaDetails?.length?'Main tweet media: ':'')+text+(!qtMediaDetails?.length&&qtText?' | Quote tweet text: '+qtText:'')] : [upgradeImage(i),(qtMediaDetails?.length?'Main tweet media: ':'')+text+(!qtMediaDetails?.length&&qtText?' | Quote tweet text: '+qtText:'')]);\n\t})\nif(qtMediaDetails)qtMediaDetails.forEach(i => {\n\tconst isVideo = i.video_info ? true : false;\n\ti = isVideo ? i?.video_info?.variants.filter(i=>i.content_type==='video/mp4').sort((a,b)=>b.bitrate-a.bitrate).map(i=>i.url) : i.media_url_https;\n\tmedia.push(isVideo ? [['#'+i[0],i?.[1]||''],'Quote tweet media: '+qtText+(!mediaDetails?.length&&text?' | Main tweet text: '+text:'')] : [upgradeImage(i),'Quote tweet media: '+qtText+(!mediaDetails?.length&&text?' | Main tweet text: '+text:'')]);\n\t})\n if(card){\n if(Array.isArray(card)){\nmedia.push([card.find(i=>i.value?.type==='IMAGE').value.image_value.url.replace(/(&name=).+/,'$1orig'),text]);\n }else{\n media.push([typeof card==='string' ? [Object.values(JSON.parse(card)?.media_entities)?.[0]?.media_url_https,text] : ['#'+(card.photo_image_full_size_original||card.player_image_original||card.thumbnail_image_x_large)?.image_value?.url, (card.photo_image_full_size_large||card.player_image_x_large)?.image_value?.url],text]);\n }\n }\n}else{\n const videoId = mediaDetails.concat(qtMediaDetails).find(i=>imgIdRegex.test(i.media_url_https))?.video_info?.variants?.filter(i=>i.content_type==='video/mp4').sort((a,b)=>b.bitrate-a.bitrate)?.[0].url?.match(/\\/([^\\/.]+)\\.mp4/)?.[1]||'', videoIdRegex = videoId ? new RegExp(videoId) : null;\nif(mediaDetails?.video_info?.variants?.some(i=>imgIdRegex.test(i.poster))||mediaDetails?.some(i=>imgIdRegex.test(i.media_url_https)))mediaDetails.forEach(i => {\n\tconst isVideo = i.video_info ? true : false;\n\ti = isVideo ? i.video_info.variants.filter(i=>i.content_type==='video/mp4').sort((a,b)=>b.bitrate-a.bitrate).map(i=>i.url) : i.media_url_https;\n\tmedia.push(isVideo ? [['#'+i[0],i?.[1]||''],text] : [upgradeImage(i),text]);\n\t})\n\tif(qtMediaDetails?.video_info?.variants?.some(i=>imgIdRegex.test(i.poster))||qtMediaDetails?.some(i=>imgIdRegex.test(i.media_url_https)))qtMediaDetails.forEach(i => {\n\tconst isVideo = i.video_info ? true : false;\n\ti = isVideo ? i.video_info.variants.filter(i=>i.content_type==='video/mp4').sort((a,b)=>b.bitrate-a.bitrate).map(i=>i.url) : i.media_url_https;\n\tmedia.push(isVideo ? [['#'+i[0],i?.[1]||''],qtText] : [upgradeImage(i),qtText]);\n\t})\n if(card){\n if(Array.isArray(card)){\n media.push([card.find(i=>i.value?.type==='IMAGE').value.image_value.url.replace(/(&name=).+/,'$1orig'),text]);\n }else{\n media.push([typeof card==='string' ? [Object.values(JSON.parse(card)?.media_entities)?.[0]?.media_url_https,text] : ['#'+(card.photo_image_full_size_original||card.player_image_original||card.thumbnail_image_x_large)?.image_value?.url, (card.photo_image_full_size_large||card.player_image_x_large)?.image_value?.url],text]);\n }\n }\nidx = $[3]&&media.findIndex(i=>imgIdRegex.test(i[0][0])||videoIdRegex?.test(i[0][0]));\n\t}\nreturn media?.length ? (!$[3] ? media : !config.show_thumbs_as_album ? [media[idx]] : {\"\":media,idx:idx}) : !text&&!qtText&&backupURL ? {loop:'https://api.'+backupURL+'xtwitter.com/status/'+$[2]+($[3]?'?img_id/'+$[3]:'')} : no_media(text)\n} else {\n const backupMessage = !config.hide_third_party_api_message?'A third party API, '+$[1].slice(4).toUpperCase()+'Twitter, was used to get this media. For faster loading, the sieve can be set to use the account token when logged in. For more information, see the notes section of the X.COM-h-p sieve. | ':'';\n let videoId, videoIdRegex;\n if($[1][4]==='v'){\n this.loopStop = this.loopStop||0;\n const text = data.text;\n let mediaURLs = data.media_extended;\n if($[3]){\n if(!mediaURLs.some(i=>imgIdRegex.test(i.thumbnail_url))&&this.loopStop===0&&data.qrtURL){\n this.loopStop=1;\n return {loop:data.qrtURL.replace(/^.+(\\.com\\/).*(status\\/\\d+).*/,(t,g1,g2)=>'https://api.vxtwitter'+g1+g2+($[3]?'?img_id'+$[3]:''))};\n }\n videoId = mediaURLs.find(i=>imgIdRegex.test(i.thumbnail_url))?.url?.match(/\\/([^\\/.]+)\\.mp4/)?.[1]||'', videoIdRegex = videoId ? new RegExp(videoId) : null;\n }\n media = mediaURLs.map(i=>[(i.type==='video'||/\\.mp4/.test(i.url)?i.url:upgradeImage(i.url)),backupMessage+text]);\n idx = $[3]&&media.findIndex(i=>imgIdRegex.test(i[0])||videoIdRegex?.test(i[0]));\n delete this.loopStop;\n} else {\n const text = data.tweet?.text||'',qtText = data.quote?.text||'';\n let mediaURLs = data.media?.all||[],qtMediaURLs = data.quote?.media?.all||[];\n if(!$[3]){\n mediaURLs.forEach(i => {\n\tconst isVideo = /\\.mp4/.test(i.url) ? true : false;\n\ti = isVideo ? i?.variants.filter(i=>i.content_type==='video/mp4').sort((a,b)=>b.bitrate-a.bitrate).map(i=>i.url) : i.url;\n\tmedia.push(isVideo ? [['#'+i[0],i?.[1]||''],backupMessage+text] : [upgradeImage(i),backupMessage+text]);\n\t})\n }else{\n videoId = mediaURLs.concat(qtMediaURLs).find(i=>imgIdRegex.test(i.thumbnail_url))?.variants?.filter(i=>i.content_type==='video/mp4').sort((a,b)=>b.bitrate-a.bitrate)?.[0].url?.match(/\\/([^\\/.]+)\\.mp4/)?.[1]||'', videoIdRegex = videoId ? new RegExp(videoId) : null;\n if(mediaURLs?.some(i=>imgIdRegex.test(i.thumbnail_url))||mediaURLs?.some(i=>imgIdRegex.test(i.url)))mediaURLs.forEach(i => {\n\tconst isVideo = /\\.mp4/.test(i.url) ? true : false;\n\ti = isVideo ? i.variants.filter(i=>i.content_type==='video/mp4').sort((a,b)=>b.bitrate-a.bitrate).map(i=>i.url) : i.url;\n\tmedia.push(isVideo ? [['#'+i[0],i?.[1]||''],backupMessage+text] : [upgradeImage(i),backupMessage+text]);\n\t})\n\tif(qtMediaURLs?.some(i=>imgIdRegex.test(i.thumbnail_url))||qtMediaURLs?.some(i=>imgIdRegex.test(i.url)))qtMediaURLs.forEach(i => {\n\tconst isVideo = i.format?.startsWith('video') ? true : false;\n\ti = isVideo ? i.variants.filter(i=>i.content_type==='video/mp4').sort((a,b)=>b.bitrate-a.bitrate).map(i=>i.url) : i.url;\n\tmedia.push(isVideo ? [['#'+i[0],i?.[1]||''],qtText] : [upgradeImage(i),backupMessage+qtText]);\n\t})\n idx = media.findIndex(i=>imgIdRegex.test(i[0][0])||videoIdRegex?.test(i[0][0]));\n\t}\n\t}\nreturn media?.length ? (!$[3] ? media : !config.show_thumbs_as_album ? [media[idx]] : {\"\":media,idx:idx}) : ''\n}\nfunction no_media(t){\nreturn config.show_pfp_if_no_media&&pfp ? [pfp,'No media. Tweet text: '+t] : [ 'data:image/svg+xml,' + encodeURIComponent(`\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"100\" width=\"540\" style=\"background-color: #2a2a2a;\">\n <foreignObject height=\"100%\" width=\"100%\">\n <div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"display: table; height: 100%; width: 100%;\">\n <span style=\"color: tomato; display: table-cell; font: 36px sans-serif; vertical-align: middle; text-align: center; white-space: pre-wrap;\">\n No media\n </span>\n </div>\n </foreignObject>\n </svg>`.replace(/\\n\\s+/g, '')), 'Tweet text: '+t ]\n}","img":"^(?:(pbs\\.twimg\\.com/(?:(profile_banners/\\d+/\\d+/)|(?:[^?]+\\?format=[^&]+&name=)|(?!profile_images/)[^.]+\\.)).*|((?:x|twitter)\\.com/\\w+(?:/photo|\\?|$).*))","loop":2,"to":":\nconst n=this.node, id=$[0].match(/\\/([^\\/?.]+)(?:[?.]|$)/)?.[1]||'';\n\nconst upgrade = img => '#'+img.replace(/\\.([a-z0-9]{3,4}):?\\w*$|\\?format=(\\w+)&.+/,'?format=$1$2&name=orig').replace('webp','#jpg png#')+'\\n'+img.replace(/\\.([a-z0-9]{3,4}):?\\w*$|\\?format=(\\w+)&.+/,'?format=$1$2&name=large').replace('webp','#jpg png#');\n\nif($[2])return $[1]+'1500x500';\n\nif($[3])return n.closest('a')?.querySelector('img[src][draggable=\"true\"]')?.src?.replace(/_[a-z0-9]+\\./, '.')||'';\n\nif(!/\\b(?:x|twitter)\\.com$/.test(location.hostname))return upgrade($[0]);\n\nreturn (n.closest('article')?.querySelector('a[href*=\"/status/\"][aria-label]')||n.closest('a[href*=\"/status/\"][role=\"link\"]')||n.closest('article,div[class=\"css-1dbjc4n r-1iusvr4 r-16y2uox r-a5pmau r-bnwqim\"],div[class=\"css-1dbjc4n r-1iusvr4 r-16y2uox r-bnwqim\"]')?.querySelector('a[href*=\"/status/\"]')||n.closest('[class=\"css-175oi2r r-184en5c\"]')?.nextSibling?.querySelector('a[href*=\"/status/\"]'))?.href?.replace(/^(https:\\/\\/[^\\/]+\\/[^\\/]+\\/status\\/\\d+).*/, '$1?img_id/'+id)||upgrade($[0]);","note":"Imagus_fan\nhttps://www.reddit.com/r/imagus/comments/1k7bygg/comment/mp9ze3n\nOLD\nhttps://www.reddit.com/r/imagus/comments/1hh7gdk/comment/mc567w2\nhttps://www.reddit.com/r/imagus/comments/1hh7gdk/comment/m2y9a5w\n\n\n\n!!!\nAll information about the capabilities and features of the sieve, and also about the options presented in it: see FAQ, p.20.\n\n\nEXAMPLES\nhttps://www.reddit.com/domain/x.com/new\nhttps://www.reddit.com/domain/twitter.com/new\nhttps://x.com/3d_hentai1/media\nhttps://www.reddit.com/r/imagus/comments/159jk73/comment/jti74is\nhttps://x.com/otosalex\nhttps://x.com/search?q=example&src=typed_query&f=media\nhttps://x.com/rei_RR/status/1737115628472086910"}}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement