Advertisement
Guest User

Версия mal.php до апокалипсиса

a guest
Aug 4th, 2014
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 14.93 KB | None | 0 0
  1. <?php
  2.  $GLOBALS['error']='';$GLOBALS['acc']='';$GLOBALS['acc_id']=0;
  3.  global $error, $acc, $acc_id;
  4.  
  5.  function get_achievments($scores, $weighed_scores, $animes){
  6.   //  if (!iam()){return '';}
  7.  
  8.   $count_score = 0;
  9.   $sum_score   = 0;
  10.   $max_count   = 1;
  11.   $inflection_point_count=0; // Точки перегиба
  12.   $inflection_u = null;
  13.   for ($i=1;$i<=10;$i++){
  14.    $count_score+=$scores[$i];
  15.    $sum_score  +=$scores[$i]*$i;
  16.    if ($scores[$i] > $scores[$max_count]){$max_count=$i;}
  17.    
  18.    if ($i>1){
  19.     if ($i==2){
  20.      $inflection_u=($scores[2]>$scores[1]);
  21.     }else{
  22.      $u=($scores[$i]>$scores[$i-1]);
  23.      if ($u!==$inflection_u){
  24.       $inflection_point_count++;
  25.       $inflection_u=$u;
  26.      }
  27.     }
  28.    }
  29.   }
  30.   unset($u);
  31.  
  32.   $mean_score  = $sum_score / $count_score;
  33.  
  34.   $buf='<!-- sum: '.$sum_score.'; count_score: '.$count_score.'; max = ['.$max_count.'] = '.$scores[$max_count].' -->';
  35.   if ($mean_score>=8){
  36.    $buf.='<div class="achievment"><h2>Восторженный ньюфаг</h2><div class="text">Средний балл больше 8. Он должен быть между 5 и 6.</div></div>';
  37.   }
  38.  
  39.   if (abs($mean_score-5.5)<=0.5){
  40.    $buf.='<div class="achievment achievment-epic"><h2>Правильное отношение</h2><div class="text">Средний балл между 5 и 6. </div></div>';
  41.   }
  42.  
  43.   if ($mean_score<=4){
  44.    $buf.='<div class="achievment"><h2>Watching anime is suffering</h2><div class="text">Средний балл ниже 4. Прекратите смотреть аниме. Вообще!</div></div>';
  45.   }
  46.  
  47.   if ($count_score>=500){
  48.    $buf.='<div class="achievment achievment-epic"><h2>Ха-ха, ебать ты говноед)))</h2><div class="text">Вы посмотрели 500 и более тайтлов. '.
  49.          'Аниме кончилось. Началась манга</div></div>';
  50.   }
  51.  
  52.   if (($scores[$max_count]<=0.5*$scores[10])and($max_count!==10)){
  53.    $buf.='<div class="achievment achievment-red"><h2>Да ты же поехавший, ты понимаешь?</h2><div class="text">У вас не меньше десяток, чем половина самого '.
  54.          'частого балла. Смените систему ценностей и проставьте баллы заново</div></div>';
  55.   }
  56.  
  57.   if ($max_count==8){
  58.    $buf.='<div class="achievment"><h2>Восьмёркобот</h2><div class="text">Ваша самая частая оценка это восемь. При нормальном распределении '.
  59.          'это невозможно. Пожалуйста, проставьте оценки заново.</div></div>';
  60.   }
  61.  
  62.   if ($max_count==9){
  63.    $buf.='<div class="achievment"><h2>Счастливая девятка</h2><div class="text">Чаще всего вы ставите девятку. Это уже ни в какие ворота не лезет. </div></div>';
  64.   }
  65.  
  66.   if ($max_count==10){
  67.    $buf.='<div class="achievment achievment-red"><h2>Пронзив небеса</h2><div class="text">Чаще всего вы ставите десять баллов. Очевидно, что вы либо толстый тролль '.
  68.          'либо клинический долбоёб. Извините, но адекватных рекомендаций не ждите</div></div>';
  69.   }
  70.  
  71.   if ($scores[1]==0){
  72.    $buf.='<div class="achievment"><h2>Мне повезло</h2><div class="text">Вы не поставили ни одной единицы. Вам точно не попадалось дно? '.
  73.          'Попробуйте поставить единицу хотя бы дропу</div></div>';
  74.   }
  75.  
  76.   if ($scores[1]+$scores[2]+$scores[3]+$scores[4]==0){
  77.    $buf.='<div class="achievment"><h2>Четырёхбальный</h2><div class="text">У вас болезнь ньюфагов. Не бойтесь ставить оценки ниже 5</div></div>';
  78.   }
  79.  
  80.   if ($scores[10]+$scores[9]==0){
  81.    if ($scores[10]==0){
  82.     $buf.='<div class="achievment"><h2>Мне просто не попалась та самая</h2><div class="text">Вы не поставили ни одной десятки</div></div>';
  83.    }else{
  84.     $buf.='<div class="achievment"><h2>Стивен Сигал</h2><div class="text">Вы безэмоциональны</div></div>';
  85.    }
  86.   }else{
  87.    if (($scores[10]+$scores[9])/$count_score<=0.1){
  88.     $buf.='<div class="achievment"><h2>Вторая сигма</h2><div class="text">У вас мало самых высоких оценок ('.
  89.           round(($scores[10]+$scores[9])/$count_score*100).'%). Это хорошо!</div></div>';
  90.    }
  91.    if ($scores[10]/$count_score<=0.03){
  92.     $buf.='<div class="achievment achievment-epic"><h2>Третья сигма</h2><div class="text">У вас крайне мало десяток ('.
  93.           round($scores[10]/$count_score*100).
  94.           '%). Это прекрасно! Держитесь этого курса. Крупинки эталона слишком редки, чтобы быть везде</div></div>';
  95.    }
  96.   }
  97.  
  98.   if (($scores[4]+$scores[5]+$scores[6]+$scores[7])/$count_score>=0.8){
  99.    $buf.='<div class="achievment"><h2>Первая сигма</h2><div class="text">У вас очень много оценок в средней зоне. '.
  100.          'Держитесь этого курса, так и должно быть. БОльшая часть аниме должна не вызывать сильных эмоций, как не вызывает у вас.</div></div>';
  101.   }
  102.  
  103.   if (abs($max_count-$mean_score)>1){
  104.    $buf.='<div class="achievment"><h2>Сдвиг по фазе</h2><div class="text">Ваша средняя оценка очень далеко от самой частой</div></div>';
  105.   }
  106.  
  107.   if (abs($max_count-$mean_score)<0.3){
  108.    $buf.='<div class="achievment"><h2>Точка отсчёта</h2><div class="text">Ваша средняя оценка очень близко к самой частой</div></div>';
  109.   }
  110.  
  111.   if ($inflection_point_count==0){
  112.    $buf.='<div class="achievment"><h2>Генеральная линия партии</h2><div class="text">Ваш график прямой как стержень Сталлиона</div></div>';
  113.   }
  114.  
  115.   if ($inflection_point_count>2){
  116.    $buf.='<div class="achievment"><h2>Вот такая, понимаешь, загогулина</h2><div class="text">Ваш график выглядит несколько поломанным</div></div>';
  117.   }
  118.  
  119.  
  120.   //   $buf.='<div class="achievment"><h2>Восторженный ньюфаг</h2><div class="text"></div></div>';
  121.  
  122.  
  123.   return $buf;
  124.  }
  125.  
  126.  
  127.  function get_info($acc_i, $mode=0){
  128.   global $sad_prefix, $acc, $acc_id;
  129.   list($sad_u1m_sec,$sad_u1s_sec)=explode(' ',microtime());
  130.   $acc=preg_replace('|^ +|', '', $acc_i);
  131.   $acc=preg_replace('| +$|', '', $acc);
  132.   if (preg_match('|[^a-z0-9_-]|i', $acc)){$error='Аккаунт какой-то неправильный, вам не кажется?'; return 1;}
  133.   $q_c=mysql_fetch_assoc(mysql_query('select `id`, `lasttime` from `'.$sad_prefix.'mal_accounts` where `sname` like "'.$acc.'"'));
  134.   if ((int)$q_c['id']<1){
  135.    if ($mode==1){return 2;}
  136.    mysql_query('insert into `'.$sad_prefix.'mal_accounts` (`sname`) values ("'.$acc.'");');
  137.    $acc_id=mysql_insert_id();
  138.   }else{$acc_id=(int)$q_c['id'];}
  139.   if ($q_c['lasttime']>=time()-3*24*3600){
  140. //   if ($mode==1){get_full_list($acc_id);}
  141.    return 0;
  142.   }
  143.  
  144.   mysql_query('update `'.$sad_prefix.'_options` set `mal_last`=UNIX_TIMESTAMP() where `id`=1;');
  145. //  list($sad_u2m_sec,$sad_u2s_sec)=explode(' ',microtime());
  146.   $q=mysql_query('select * from `'.$sad_prefix.'mal_views` where `parent`='.$acc_id);
  147.   $animes=array();while ($q_c=mysql_fetch_assoc($q)){$animes[(int)$q_c['anime_id']]=$q_c;}
  148.  
  149. //  list($sad_u3m_sec,$sad_u3s_sec)=explode(' ',microtime());
  150.   $ch =curl_init('http://myanimelist.net/malappinfo.php?status=all&u='.$acc);
  151.   curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  152.   curl_setopt($ch, CURLOPT_HTTPHEADER,
  153.                array('Connection: close',
  154.                      'user_agent: ELinks/0.11.7 (textmode; FreeBSD 8.3-STABLE amd64; 125x41-2)',
  155.                      'accept: */*',
  156.                      'accept_language: en',
  157.                      'accept_encoding: gzip'));
  158.   //  curl_setopt($ch, CURLOPT_INTERFACE, '62.109.3.66');
  159.   $buf=curl_exec($ch);
  160.  
  161.   foreach (array(15, ) as $code){
  162.    $buf=str_replace(chr($code), ' ', $buf);
  163.   }
  164.  
  165.   $fo=fopen($GLOBALS['sad_root'].'/last-mal-account.xml', 'w');
  166.   fwrite($fo, $buf);
  167.   fclose($fo);
  168.  
  169. //  list($sad_u4m_sec,$sad_u4s_sec)=explode(' ',microtime());
  170.   $xml=sad_xml_rawtext($buf);
  171.   if ($xml->childNodes->item(0)->nodeName=='error'){$error='Такого пользователя на MAL\'е не существует'; return 3;}//not found
  172.   list($sad_u5m_sec,$sad_u5s_sec)=explode(' ',microtime());
  173.  
  174.   $n_a=array();
  175.   for ($i=1;$i<$xml->childNodes->length;$i++){
  176. //   list($sad_ua1m_sec,$sad_ua1s_sec)=explode(' ',microtime());
  177.    $node  =$xml->childNodes->item($i);
  178.    if ($node->nodeName!=='anime'){continue;}
  179.    $a_id  =(int)sad_xml_getnode($node, 'series_animedb_id#');$n_a[$a_id]=false;
  180.    $score =(int)sad_xml_getnode($node, 'my_score#');
  181.    $status=(int)sad_xml_getnode($node, 'my_status#');
  182.    list($sad_ua2m_sec,$sad_ua2s_sec)=explode(' ',microtime());
  183. //   eval('echo \'<br />A1 <b>\'.(($sad_ua2s_sec+$sad_ua2m_sec)-($sad_ua1s_sec+$sad_ua1m_sec)).\'</b>\';');
  184.    
  185.    if (isset($animes[$a_id])){
  186.     //Аниме уже было в списке
  187. //    echo '<br>'.$animes[$a_id]['score'].'; '.$score.' / '.$animes[$a_id]['status'].' ; '.$status;
  188.     if ((int)$animes[$a_id]['score']!==$score or (int)$animes[$a_id]['status']!==$status){
  189.      mysql_query('update `'.$sad_prefix.'mal_views` set `score`='.$score.', `status`='.$status.' where `id`='.$animes[$a_id]['id']);
  190. //     echo '<br>update; ';
  191.     }
  192.    }else{
  193.     //Нечто новое!
  194.     mysql_query('insert into `'.$sad_prefix.'mal_views` (`parent`, `anime_id`, `score`, `status`) values ('.$acc_id.', '.$a_id.', '.$score.', '.$status.');');
  195.    }
  196.   }
  197.   unset($node);
  198. //  list($sad_u6m_sec,$sad_u6s_sec)=explode(' ',microtime());
  199.  
  200.   //Добавляем аниме в базу данных
  201.   $sql='';foreach($n_a as $id => $t){$sql.=', '.$id;}
  202.   $q=mysql_query('select `id` from `'.$sad_prefix.'mal_anime` where `id` in ('.substr($sql, 1).')and(`lasttime`>0)');
  203.   while ($q_c=mysql_fetch_assoc($q)){$n_a[$q_c['id']]=true;}$u=false;$anime_add=array();
  204. //  list($sad_u7m_sec,$sad_u7s_sec)=explode(' ',microtime());
  205.   foreach($n_a as $id => $t){
  206.    if ($t){continue;}
  207.    curl_setopt($ch, CURLOPT_URL, 'http://myanimelist.net/anime/'.$id.'/a/userrecs');
  208.    if ($u and false){sleep(2);}$buf=curl_exec($ch);$u=true;
  209. //   list($sad_u8m_sec,$sad_u8s_sec)=explode(' ',microtime());
  210.    preg_match('|<title>(.+) +\\- MyAnimeList.net</title>|', $buf, $b);$title=$b[1];
  211.    preg_match('|<span class="dark_text">Score:</span>[ \\t]+([0-9.]+)|i', $buf, $b);$score=(int)(100*$b[1]);
  212.    if (iamd()){echo $title.' / '.$score.'<br/>';}
  213.    unset($buf);
  214.    
  215.    //оставляем только список
  216.    $buf=substr($buf, strpos('<h2>Recommendations Submitted by Users</h2>', $buf), strlen($buf));
  217.    $a=explode('<div class="borderClass">', $buf);unset($a[0], $buf);
  218.    
  219. //   list($sad_u9m_sec,$sad_u9s_sec)=explode(' ',microtime());
  220.    $sql='';$sql1='';
  221.    foreach ($a as $b){
  222.     if (!preg_match('|http://myanimelist.net/anime/([0-9]+)/([^"]+)|i', $b, $c)){continue;}
  223.     preg_match('|by <strong>([0-9]+)|i', $b, $d);$d[1]=(int)$d[1]+1;
  224.     $sql .=', ('.min($id, (int)$c[1]).', '.max($id, (int)$c[1]).', '.$d[1].')';
  225.     $anime_add[(int)$c[1]]=str_replace('_', ' ', $c[2]);
  226.    }
  227.    
  228. /*   echo sad_safe_html('delete from `'.$sad_prefix.'mal_rec` where (`a1`='.$id.')or(`a2`='.$id.');').'<br>';
  229.    echo sad_safe_html('insert into `'.$sad_prefix.'mal_rec` (`a1`, `a2`, `count`) values '.substr($sql, 1).';').'<br>';
  230.    echo sad_safe_html('delete from `'.$sad_prefix.'mal_anime` where (`id`='.$id.');').'<br>';
  231.    echo sad_safe_html('insert into `'.$sad_prefix.'mal_anime` (`id`, `title`, `score`, `lasttime`) values ('.$id.', "'.sad_safe_mysql($title).'", '.$score.', UNIX_TIMESTAMP());').'<br>';
  232.    list($sad_u10m_sec,$sad_u10s_sec)=explode(' ',microtime());
  233.    for ($tmp=2;$tmp<=10;$tmp++){
  234.     eval ('echo \''.$tmp.' <b>\'.(($sad_u'.$tmp.'s_sec+$sad_u'.$tmp.'m_sec)-($sad_u'.($tmp-1).'s_sec+$sad_u'.($tmp-1).'m_sec)).\'</b><br/>\';');
  235.    }
  236.    return 4; */
  237.    
  238.    mysql_query('delete from `'.$sad_prefix.'mal_rec` where (`a1`='.$id.')or(`a2`='.$id.');');
  239.    mysql_query('insert into `'.$sad_prefix.'mal_rec` (`a1`, `a2`, `count`) values '.substr($sql, 1).';');
  240.    
  241.    mysql_query('delete from `'.$sad_prefix.'mal_anime` where (`id`='.$id.');');
  242.    mysql_query('insert into `'.$sad_prefix.'mal_anime` (`id`, `title`, `score`, `lasttime`) values ('.$id.', "'.sad_safe_mysql($title).'", '.$score.', UNIX_TIMESTAMP());');
  243. //   break;
  244.   }
  245.   if ($u){mysql_query('optimize table `'.$sad_prefix.'mal_rec`;');}
  246.   mysql_query('update `'.$sad_prefix.'mal_accounts` set `lasttime`=UNIX_TIMESTAMP() where `id`='.$acc_id);
  247.  
  248.   //Добавляем аниме, которое было в рекомендациях
  249.   $sql='';foreach ($anime_add as $id => $t){$sql.=', '.$id;}
  250.   $q=mysql_query('select `id` from `'.$sad_prefix.'mal_anime` where `id` in ('.substr($sql, 1).')');
  251.   while ($q_c=mysql_fetch_assoc($q)){unset($anime_add[$q_c['id']]);}
  252.   $sql='';foreach ($anime_add as $id => $t){$sql.=', ('.$id.', "'.sad_safe_mysql($t).'")';}
  253.   mysql_query('insert into `'.$sad_prefix.'mal_anime` (`id`, `title`) values '.substr($sql, 1));
  254.  
  255.   return 0;
  256.  }
  257.  
  258.  function get_collaboration($anime_list){
  259.   global $sad_prefix;
  260.   $new_list=array();
  261.  
  262.   echo '<table>';
  263.  
  264.   $sql='';$k=0;
  265.   foreach ($anime_list as $id => $score){
  266.    if ($score==0){continue;}
  267.    $sql='select `title2` as `other_id`, `vector` from `'.$sad_prefix.'mal_titles_intersect` where (`title1`='.$id.')and(abs(`vector`)>=0.20)
  268. union
  269. select `title1`, `vector` from `'.$sad_prefix.'mal_titles_intersect` where (`title2`='.$id.')and(abs(`vector`)>=0.20);';
  270.    $q=mysql_query($sql);
  271.    while ($q_c=mysql_fetch_assoc($q)){
  272.     $otid  =(int)$q_c['other_id'];
  273.     $vector=(float)$q_c['vector'];
  274.     /*    if (($otid==12355)and(iam())){
  275.      echo '<tr><td>'.$id.'</td><td>'.($vector*$score).'</td></tr>';
  276.     } */
  277.    
  278.     if (!isset($new_list[$otid])){$new_list[$otid]=array(0,0,0);}
  279.     $new_list[$otid][0]+=$vector*$score;
  280.     $new_list[$otid][1]+=($score>0) ? $vector*$score : 0;
  281.     $new_list[$otid][2]++;
  282.    }
  283.    
  284.    //   if ($k++>10){echo 'dbg_break;';break;}
  285.   }
  286.  
  287.   echo '</table>';
  288.  
  289.   foreach ($anime_list as $id => $score){
  290.    unset($new_list[$id]);
  291.   }
  292.   /*  foreach ($new_list as $id => $a){
  293.    if ($new_list[$id][0]<0){unset($new_list[$id]);}
  294.   } */
  295.  
  296.   return $new_list;
  297.  }
  298.  
  299.  function get_color($num){
  300.   return '#55f';
  301.  }
  302. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement