Ir para conteúdo

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.
  5. Rodrigo5468

    Mostrar Resultados sem Repetir Dados

    Olá a todos(as), boa tarde! Tenho uma Query e um pequeno código em PHP para mostrar os resultados em uma tabela, mas estão repetindo os resultados da Query. Gostaria de uma solução, ou uma gambiarra para isso. Query SELECT DISTINCT b.ID AS "ID", b.Character AS "Personagem", b.Money AS "DinMao", b.BankMoney AS "DinBanco", b.Savings2 AS "DinPoupa", c.houseOwner AS "IDono", SUM(c.houseMoney) AS "DinCasa" FROM characters b INNER JOIN houses c ON (b.ID = c.houseOwner) ORDER BY ((b.Money+b.BankMoney+b.Savings2+c.houseMoney)) DESC LIMIT 0, 1000 PHP if(mysqli_num_rows($q) > 0) { while($r = $q->fetch_assoc()) { //Código da Tabela } } Observação: Quando eu removo a seguinte parte da minha Query que é: SUM(c.houseMoney) AS "DinCasa" e deixo assim: c.houseMoney AS "DinCasa" Os dados da minha tabela repetem, não sei o motivo e/ou a circunstância disso. Mas peço a ajuda de vocês para solucionar. Vale ressaltar que (ID e houseOwner) tem os mesmos valores, só o valor da casa que recebe o valor do ID, e ele pode ter quantas casa ele quiser, e se ele tiver cinco casas, mostrará o resultado cinco resultados na minha tabela, como posso resolver isso? Meu muito obrigado desde já.
  6. Rodrigo5468

    Mostrar Resultados sem Repetir Dados

    Olá, bom dia. Obrigado a todos por responderem, mas será que poderiam me dá mais um auxilio? Eu li todo o tópico que o nosso amigo 'Williams Duarte' me informou e tentei utiliza-lo de inúmeras maneiras, mas sem sucesso. Adicionei o GROUP BY SUM(c.houseMoney) antes do ORDER BY, mas sem sucesso. Será que poderia me dá um exemplo, utilizando a minha Query? Muito obrigado a todos!
×

Informação importante

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