Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Salve, salve pessoal!
Estou tendo um probleminha... Preciso buscar as informações de determinados vídeos no YouTube. Até aí, tudo bem. Mas as informações estão vindo em UTF-8 sendo que preciso armazená-las no mySQL como ISO-8859-1.
Segue o código que busca as informações no YouTube:
<?php
/**
* Classe de integração que importa as tags e o embed de um vídeo do Youtube
*
* @author Rafael Wendel Pinheiro <rafaelwendel@hotmail.com> <www.rafaelwendel.com>
* @version 1.0
*/
class Youtube {
/**
* URL do vídeo no Youtube
* @access private
* @var String
*/
private $link;
/**
* Armazena as tags referentes ao vídeo
* @access private
* @var array
*/
private $tags = array();
/**
* Armazena informações referentes à erros
* @access private
* @var array
*/
private $erro = array();
/**
* Método construtor da classe Youtube.
* @access public
* @param String $link URL do vídeo no Youtube (OBS: Não utilize URL encurtada)
* @return void
*/
public function __construct($link = '') {
if($link != ''){
$this->setLink($link);
$this->loadTags();
}
}
/**
* Pegar a URL do vídeo que está sendo utilizado
* @access public
* @return String a URL do vídeo
*/
public function getLink() {
return $this->link;
}
/**
* Definir a URL do vídeo no Youtube
* @access public
* @param String $link a URL do vídeo
* @return mixed false em caso de URL inválida
*/
public function setLink($link) {
if(!strstr($link, "youtube.com")){
$this->setErro('URL inválida');
return false;
}
$this->link = $link;
}
/**
* Capturar o(s) erro(s)
* @access public
* @return Array
*/
public function getErro() {
return $this->erro;
}
/**
* Definir uma mensagem de erro
* @access public
* @param String $erro
* @return void
*/
public function setErro($erro) {
$this->erro[] = $erro;
}
/**
* Armazena as tags importadas na variável $tags
* @access private
* @param Array $tags
* @return void
*/
private function setTags($tags){
if(is_array($tags)){
foreach($tags as $prop => $value){
$this->tags[$prop] = $value;
}
$this->repairTags();
}
}
/**
* Capturar as tags do vídeo
* @access public
* @return mixed Arrays com tags ou false em caso de array vazio
*/
public function getTags() {
if(count($this->tags) > 0){
return $this->tags;
}
else{
return false;
}
}
/**
* Chamar a execução da URL e setar as tags em caso de sucesso
* @access private
* @return mixed False em casso de erros
*/
private function loadTags() {
if(empty ($this->link)){
$this->setErros('URL inválida');
return false;
}
$propertys = $this->get_propertys_tags();
if(in_array('noindex', $propertys)){
$this->setErro('URL inválida');
return false;
}
$this->setTags($propertys);
}
/**
* Repara os nomes dos indices do array $tags
* @access private
* @return void
*/
private function repairTags(){
if(count($this->tags) > 0){
$tags = $this->tags;
foreach ($tags as $prop => $value){
$nome = explode(':', $prop);
$nome = $nome[count($nome) - 1];
$new[$nome] = $value;
}
$this->tags = $new;
}
}
/**
* Pega o conteúdo do link do Youtube via CURL
* @access private
* @return String $data Conteúdo lido
*/
private function file_get_contents_curl(){
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $this->link);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
/**
* Lê o conteúdo recuperado e extrai as tags do vídeo
* @access private
* @return Array As Tags do vídeo
*/
private function get_propertys_tags(){
$html = $this->file_get_contents_curl();
$doc = new DOMDocument();
@$doc->loadHTML($html);
$metas = $doc->getElementsByTagName('meta');
for ($i = 0; $i < $metas->length; $i++){
$meta = $metas->item($i);
$prop_tags[$meta->getAttribute('property')] = $meta->getAttribute('content');
}
return $prop_tags;
}
/**
* Retorna o código de incorporação do video
* @param int $width largura do embed
* @param int $height altura do embed
* @return String Código embed do vídeo
*/
public function get_embed_video($width = 396, $height = 297){
$cod_video = explode('watch?v=', $this->link);
$cod_video = $cod_video[1];
return "<iframe width=\"$width\" height=\"$height\" src=\"http://www.youtube.com/embed/$cod_video\" frameborder=\"0\" allowfullscreen></iframe>";
}
}<?php
require_once('appvars.php');
require_once('connectvars.php');
require_once('youtube.class.php');
$dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
if (isset($_POST['submit'])) {
$link_video = mysqli_real_escape_string($dbc, trim($_POST['link_video']));
//Obtém os dados para cadastro do vídeo no BD
$id_adm = mysqli_real_escape_string($dbc, trim($_POST['id_usuario']));
$categoria_video = mysqli_real_escape_string($dbc, trim($_POST['categoria_video']));
$video = new Youtube("$link_video");
$tags = $video->getTags();
$titulo_video = $tags['title'];
$descricao_video = $tags['description'];
if ($titulo_video == NULL && $descricao_video == NULL) {
//Mostra erro
echo '<script type="text/javascript">';
echo 'alert("O link informado não está correto ou o vídeo foi excluído!")';
echo 'link_video.focus()';
echo '</script>';
} else {
//Verifica se o vídeo já não está cadastrado
$query = "SELECT * FROM videos WHERE link_video = '$link_video'";
$data = mysqli_query($dbc, $query);
if (mysqli_num_rows($data) == 0) {
//O vídeo não existe, então o cadastra no BD
$query = "INSERT INTO videos (link_video, titulo_video, descricao_video, categoria_video, id_usuario, data_cadastro_video) VALUES ('$link_video', '$titulo_video', '$descricao_video', '$categoria_video', '$id_usuario', NOW())";
mysqli_query($dbc, $query);
//Confirma sucesso ao usuário
echo '<script type="text/javascript">';
echo 'alert("Vídeo cadastrado com sucesso!")';
echo '</script>';
echo $titulo_video;
echo $descricao_video;
mysqli_close($dbc);
exit();
} else {
echo '<script type="text/javascript">';
echo 'alert("Este vídeo já está cadastrado!")';
echo '</script>';
$link_video = "";
}
}
}
?>
<div id="pro_form1">
<form name="cad_videos" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" onsubmit="return validar();" >
<input type="hidden" id="id_usuario" name="id_usuario" value="<?php echo $_SESSION['id_usuario'] ?>" />
<h4 style="text-indent:20px;">CADASTRO DE NOVO VÍDEO</h4>
<label for="link_video">Informe o link para o vídeo:</label>
<input type="text" id="link_video" name="link_video" style="width:285px;" />
<select name="categoria_video" id="categoria_video" style="width:130px; margin-left:10px;">
<option value="0" selected>Todos</option>
<option value="1">Gameplays</option>
<option value="2">CFs</option>
<option value="3">Tutoriais</option>
<option value="4">Engraçados</option>
<option value="5">Hackers (cheaters)</option>
<option value="6">Outros</option>
</select>
<input type="submit" value="Cadastrar" name="submit" class="pro_btn" style="margin-left:10px;"/>
</div>
Por exemplo, o vídeo http://www.youtube.com/watch?v=wzWZDI_d5CQ onde tem a descrição "É Felipe, eu tbm ramelei...
====================================
Veja no vídeo anterior Milena e suas aspirações antes do ENEM" está sendo cadastrado como "É Felipe, eu tbm ramelei... ==================================== Veja no vÃÂdeo anterior Milena e suas aspirações antes do ENEM "
Alguém saberia me dizer como posso converter estes caracteres antes de fazer a inserção no BD?
Já agradeço!
Carregando comentários...