Ir para conteúdo

POWERED BY:

Rodrigo5468

Members
  • Total de itens

    162
  • Registro em

  • Última visita

Tudo que Rodrigo5468 postou

  1. Rodrigo5468

    Youtube e MP4

    Olá, boa tarde! Eu estava procurando na internet, mas não obtive nenhum resultado significativo. Eu preciso de um script em php que converte os links do youtube para o formato .mp4. Como que eu posso fazer isso? Alguma dica? Quero que quando o usuário informa o link do youtube no input e clica no botão de converter baixe o vídeo e faz a conversão para .mp4 e fornece para o usuário o link convertido para .mp4. Obrigado desde já.
  2. Rodrigo5468

    Youtube e MP4

    Eu tentei usar esse código, mas eu não consigo fazer ele funcionar. Você pode me ajudar com isso? Os códigos são: CÓDIGO 01 - EXEMPLO <?php //Qual URL do YouTube foi fornecida para nós? $url = (string) @$_GET['url']; /** * Defina uma função para extrair um ID de vídeo do YouTube de um URL. * * @param string $url Uma URL de vídeo do YouTube * @return mixed Se for bem-sucedido, retornará uma string. Se falhar, retornará NULL **/ function getYouTubeVideoIdFromUrl($url) { preg_match( "/^(?:http(?:s)?:\/\/)?(?:www\.)?(?:m\.)?(?:youtu\.be\/|youtube\.com\/(?:(?:watch)?\?(?:.*&)?v(?:i)?=|(?:embed|v|vi|user)\/))([^\?&\"'>]+)/", $url, $matches ); //Se esta correspondência existe. if(sizeof($matches) >= 2 && strlen($matches[1])) { return $matches[1]; } //Não encontramos nada, ops... return NULL; } /** * Define a function to extract a YouTube encoded stream URL. * * @param array $streams Uma série de streams fornecida a nós na página "get_video_info" do YouTube. * @return mixed Se for bem-sucedido, retornará o URL do stream MP4. Se falhar, retornará NULL */ function getMP4FromEncodedStream($streams) { foreach($streams as $stream) { //Decodifique os dados deste fluxo. parse_str($stream, $data); //Se encontrarmos nossa fonte de stream MP4. if(stripos($data['type'], 'video/mp4') === 0) { return $data['url']; } } //Não encontramos nada, ops... return NULL; } //Iremos tentar validar o seu pedido. try { //Se uma URL do YouTube fornecida for inválida. if(($videoId = getYouTubeVideoIdFromUrl($url)) === NULL) { throw new Exception('Uma URL de vídeo do YouTube inválido foi fornecido.'); } //Recupere todas as informações pertencentes a este vídeo; mais especificamente, estamos procurando os streams de vídeo codificados. parse_str(file_get_contents('http://youtube.com/get_video_info?video_id=' . $videoId), $videoData); //Se houver um problema ao extrair informações. if(@$videoData['status'] == 'fail') { throw new Exception( $videoData['reason'] ); } //Fomos capazes de localizar um stream codificado no formato MP4? if(($streamUrl = getMP4FromEncodedStream(explode(',', $videoData['url_encoded_fmt_stream_map']))) === NULL) { throw new Exception('Nenhuma fonte de vídeo MP4 foi localizada.'); } //Onde estaremos salvando este vídeo? $saveAs = dirname(__FILE__) . '/' . $videoId . '.mp4'; //Tente abrir o URL do stream de vídeo codificado. if($read = @fopen($streamUrl, 'r')) { //Abra o arquivo no qual deseja salvar. $write = @fopen($saveAs, 'w'); //Grave o fluxo em seu arquivo. $streamReturn = stream_copy_to_stream($read, $write); //Feche nossos arquivos. @fclose($read); @fclose($write); //Se não foi possível copiar do stream. if($streamReturn === false) { throw new Exception('Não foi possível copiar isso do stream.'); } } //Se nosso novo arquivo não existir, temos um problema. if(!@file_exists($saveAs)) { throw new Exception('Encontramos um problema ao salvar este vídeo.'); } //Tudo salvo corretamente, informaremos que podem ver o arquivo. print 'Seu vídeo <strong>' . $videoId . '</strong> foi salvo em <strong>' . $saveAs . '</strong>'; } //Se algo desse errado. catch(Exception $e) { print '<strong>Ops, parece que ocorreu um erro:</strong> ' . $e->getMessage(); } CÓDIGO 02 - EXEMPLO <?php $_GET['vid'] = 'VIDEOID'; $vid = $_GET['vid'];//O ID DO VÍDEO DO YOUTUBE parse_str(file_get_contents("http://youtube.com/get_video_info?video_id=" . $vid), $info);//Decodificar os dados $videoData = json_decode($info['player_response'], true); $videoDetails = $videoData['videoDetails']; $streamingData = $videoData['streamingData']; $streamingDataFormats = $streamingData['formats']; //Definir o título do vídeo $video_title = $videoDetails["title"]; print_r($streamingDataFormats[1]['url']); $video = $streamingDataFormats[1]['url']; file_put_contents("video-title-name.mp4", fopen($video, 'r')); echo 'Download do vídeo do Youtube concluído! Agora verifique o arquivo.'; Nenhum desses código funcionam.
  3. Rodrigo5468

    Site totalmente branco

    Olá, tudo bem? Espero que sim. Eu seguir esse tutorial e essa atualização para conseguir o código final. Mas o meu site fica totalmente, não exibe absolutamente nada. Eu venho aqui recorrer a vocês, pois lá não irei ter nenhum tipo de suporte. Por favor, quem for me auxiliar com esse pequeno problema, leia o tópico do tutorial. Mas o Fruition é um script para personalizar o domínio utilizando o Notion. /* CONFIGURATION STARTS HERE */ /* Step 1: enter your domain name like fruitionsite.com */ const MY_DOMAIN = 'DOMINIO'; /* * Step 2: enter your URL slug to page ID mapping * The key on the left is the slug (without the slash) * The value on the right is the Notion page ID */ const SLUG_TO_PAGE = { '': 'CODIGO_DA_PÁGINA_PÚBLICA_DO_NOTION' }; /* Step 3: enter your page title and description for SEO purposes */ const PAGE_TITLE = ''; const PAGE_DESCRIPTION = ''; /* Step 4: enter a Google Font name, you can choose from https://fonts.google.com */ const GOOGLE_FONT = ''; /* Step 5: enter any custom scripts you'd like */ const CUSTOM_SCRIPT = ``; /* CONFIGURATION ENDS HERE */ const PAGE_TO_SLUG = {}; const slugs = []; const pages = []; Object.keys(SLUG_TO_PAGE).forEach(slug => { const page = SLUG_TO_PAGE[slug]; slugs.push(slug); pages.push(page); PAGE_TO_SLUG[page] = slug; }); addEventListener("fetch", event => { event.respondWith(fetchAndApply(event.request)); }); function generateSitemap() { let sitemap = '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'; slugs.forEach( (slug) => (sitemap += "<url><loc>https://" + MY_DOMAIN + "/" + slug + "</loc></url>") ); sitemap += "</urlset>"; return sitemap; } const corsHeaders = { "Access-Control-Allow-Origin": "*", "Access-Control-Allow-Methods": "GET, HEAD, POST, PUT, OPTIONS", "Access-Control-Allow-Headers": "Content-Type" }; function handleOptions(request) { if ( request.headers.get("Origin") !== null && request.headers.get("Access-Control-Request-Method") !== null && request.headers.get("Access-Control-Request-Headers") !== null ) { // Handle CORS pre-flight request. return new Response(null, { headers: corsHeaders }); } else { // Handle standard OPTIONS request. return new Response(null, { headers: { Allow: "GET, HEAD, POST, PUT, OPTIONS" } }); } } async function fetchAndApply(request) { if (request.method === "OPTIONS") { return handleOptions(request); } let url = new URL(request.url); url.hostname = 'www.notion.so'; if (url.pathname === "/robots.txt") { return new Response("Sitemap: https://" + MY_DOMAIN + "/sitemap.xml"); } if (url.pathname === "/sitemap.xml") { let response = new Response(generateSitemap()); response.headers.set("content-type", "application/xml"); return response; } let response; if (url.pathname.startsWith("/app") && url.pathname.endsWith("js")) { response = await fetch(url.toString()); let body = await response.text(); response = new Response( body .replace(/www.notion.so/g, MY_DOMAIN) .replace(/notion.so/g, MY_DOMAIN), response ); response.headers.set("Content-Type", "application/x-javascript"); return response; } else if (url.pathname.startsWith("/api")) { // Forward API response = await fetch(url.toString(), { body: request.body, headers: { "content-type": "application/json;charset=UTF-8", "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36" }, method: "POST" }); response = new Response(response.body, response); response.headers.set("Access-Control-Allow-Origin", "*"); return response; } else if (slugs.indexOf(url.pathname.slice(1)) > -1) { const pageId = SLUG_TO_PAGE[url.pathname.slice(1)]; return Response.redirect("https://" + MY_DOMAIN + "/" + pageId, 301); } else { response = await fetch(url.toString(), { body: request.body, headers: request.headers, method: request.method }); response = new Response(response.body, response); response.headers.delete("Content-Security-Policy"); response.headers.delete("X-Content-Security-Policy"); } return appendJavascript(response, SLUG_TO_PAGE); } class MetaRewriter { element(element) { if (PAGE_TITLE !== "") { if ( element.getAttribute("property") === "og:title" || element.getAttribute("name") === "twitter:title" ) { element.setAttribute("content", PAGE_TITLE); } if (element.tagName === "title") { element.setInnerContent(PAGE_TITLE); } } if (PAGE_DESCRIPTION !== "") { if ( element.getAttribute("name") === "description" || element.getAttribute("property") === "og:description" || element.getAttribute("name") === "twitter:description" ) { element.setAttribute("content", PAGE_DESCRIPTION); } } if ( element.getAttribute("property") === "og:url" || element.getAttribute("name") === "twitter:url" ) { element.setAttribute("content", MY_DOMAIN); } if (element.getAttribute("name") === "apple-itunes-app") { element.remove(); } } } class HeadRewriter { element(element) { if (GOOGLE_FONT !== "") { element.append( `<link href='https://fonts.googleapis.com/css?family=${GOOGLE_FONT.replace(' ', '+')}:Regular,Bold,Italic&display=swap' rel='stylesheet'> <style>* { font-family: "${GOOGLE_FONT}" !important; }</style>`, { html: true } ); } element.append( `<style> div.notion-topbar > div > div:nth-child(3) { display: none !important; } div.notion-topbar > div > div:nth-child(4) { display: none !important; } div.notion-topbar > div > div:nth-child(5) { display: none !important; } div.notion-topbar > div > div:nth-child(6) { display: none !important; } div.notion-topbar-mobile > div:nth-child(3) { display: none !important; } div.notion-topbar-mobile > div:nth-child(4) { display: none !important; } div.notion-topbar > div > div:nth-child(1n).toggle-mode { display: block !important; } div.notion-topbar-mobile > div:nth-child(1n).toggle-mode { display: block !important; } </style>`, { html: true } ); } } class BodyRewriter { constructor(SLUG_TO_PAGE) { this.SLUG_TO_PAGE = SLUG_TO_PAGE; } element(element) { element.append( `<script> const SLUG_TO_PAGE = ${JSON.stringify(this.SLUG_TO_PAGE)}; const PAGE_TO_SLUG = {}; const slugs = []; const pages = []; const el = document.createElement('div'); let redirected = false; Object.keys(SLUG_TO_PAGE).forEach(slug => { const page = SLUG_TO_PAGE[slug]; slugs.push(slug); pages.push(page); PAGE_TO_SLUG[page] = slug; }); function getPage() { return location.pathname.slice(-32); } function getSlug() { return location.pathname.slice(1); } function updateSlug() { const slug = PAGE_TO_SLUG[getPage()]; if (slug != null) { history.replaceState(history.state, '', '/' + slug); } } function onDark() { el.innerHTML = '<div title="Change to Light Mode" style="margin-left: auto; margin-right: 14px; min-width: 0px;"><div role="button" tabindex="0" style="user-select: none; transition: background 120ms ease-in 0s; cursor: pointer; border-radius: 44px;"><div style="display: flex; flex-shrink: 0; height: 14px; width: 26px; border-radius: 44px; padding: 2px; box-sizing: content-box; background: rgb(46, 170, 220); transition: background 200ms ease 0s, box-shadow 200ms ease 0s;"><div style="width: 14px; height: 14px; border-radius: 44px; background: white; transition: transform 200ms ease-out 0s, background 200ms ease-out 0s; transform: translateX(12px) translateY(0px);"></div></div></div></div>'; document.body.classList.add('dark'); __console.environment.ThemeStore.setState({ mode: 'dark' }); }; function onLight() { el.innerHTML = '<div title="Change to Dark Mode" style="margin-left: auto; margin-right: 14px; min-width: 0px;"><div role="button" tabindex="0" style="user-select: none; transition: background 120ms ease-in 0s; cursor: pointer; border-radius: 44px;"><div style="display: flex; flex-shrink: 0; height: 14px; width: 26px; border-radius: 44px; padding: 2px; box-sizing: content-box; background: rgba(135, 131, 120, 0.3); transition: background 200ms ease 0s, box-shadow 200ms ease 0s;"><div style="width: 14px; height: 14px; border-radius: 44px; background: white; transition: transform 200ms ease-out 0s, background 200ms ease-out 0s; transform: translateX(0px) translateY(0px);"></div></div></div></div>'; document.body.classList.remove('dark'); __console.environment.ThemeStore.setState({ mode: 'light' }); } function toggle() { if (document.body.classList.contains('dark')) { onLight(); } else { onDark(); } } function addDarkModeButton(device) { const nav = device === 'web' ? document.querySelector('.notion-topbar').firstChild : document.querySelector('.notion-topbar-mobile'); el.className = 'toggle-mode'; el.addEventListener('click', toggle); nav.appendChild(el); onLight(); } const observer = new MutationObserver(function() { if (redirected) return; const nav = document.querySelector('.notion-topbar'); const mobileNav = document.querySelector('.notion-topbar-mobile'); if (nav && nav.firstChild && nav.firstChild.firstChild || mobileNav && mobileNav.firstChild) { redirected = true; updateSlug(); addDarkModeButton(nav ? 'web' : 'mobile'); const onpopstate = window.onpopstate; window.onpopstate = function() { if (slugs.includes(getSlug())) { const page = SLUG_TO_PAGE[getSlug()]; if (page) { history.replaceState(history.state, 'bypass', '/' + page); } } onpopstate.apply(this, [].slice.call(arguments)); updateSlug(); }; } }); observer.observe(document.querySelector('#notion-app'), { childList: true, subtree: true, }); const replaceState = window.history.replaceState; window.history.replaceState = function(state) { if (arguments[1] !== 'bypass' && slugs.includes(getSlug())) return; return replaceState.apply(window.history, arguments); }; const pushState = window.history.pushState; window.history.pushState = function(state) { const dest = new URL(location.protocol + location.host + arguments[2]); const id = dest.pathname.slice(-32); if (pages.includes(id)) { arguments[2] = '/' + PAGE_TO_SLUG[id]; } return pushState.apply(window.history, arguments); }; const open = window.XMLHttpRequest.prototype.open; window.XMLHttpRequest.prototype.open = function() { arguments[1] = arguments[1].replace('${MY_DOMAIN}', 'www.notion.so'); return open.apply(this, [].slice.call(arguments)); }; </script>${CUSTOM_SCRIPT}`, { html: true } ); } } async function appendJavascript(res, SLUG_TO_PAGE) { return new HTMLRewriter() .on("title", new MetaRewriter()) .on("meta", new MetaRewriter()) .on("head", new HeadRewriter()) .on("body", new BodyRewriter(SLUG_TO_PAGE)) .transform(res); } Tem alguma coisa de errado?
  4. Rodrigo5468

    Notion para Web

    Olá, boa noite à todos! Estava procurando algum fremework de wiki e pude encontrar algo bem interessante em minhas pesquisas pelo Google. Eu encontrei o Notion, mas eu não pude compreender muito bem sobre ele. Eu sei que é possível eu deixar o Notion acessível para todos em minha hospedagem, como por exemplo: wiki.meudomínio.com — utilizando o Notion. Mas eu não sei como que eu posso fazer isso, então resolvi pedi ajuda de vocês. Se alguém puder me ajudar com isso, ficarei imensamente grato.
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.