Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- $GLOBALS['error']='';$GLOBALS['acc']='';$GLOBALS['acc_id']=0;
- global $error, $acc, $acc_id;
- function get_achievments($scores, $weighed_scores, $animes){
- // if (!iam()){return '';}
- $count_score = 0;
- $sum_score = 0;
- $max_count = 1;
- $inflection_point_count=0; // Точки перегиба
- $inflection_u = null;
- for ($i=1;$i<=10;$i++){
- $count_score+=$scores[$i];
- $sum_score +=$scores[$i]*$i;
- if ($scores[$i] > $scores[$max_count]){$max_count=$i;}
- if ($i>1){
- if ($i==2){
- $inflection_u=($scores[2]>$scores[1]);
- }else{
- $u=($scores[$i]>$scores[$i-1]);
- if ($u!==$inflection_u){
- $inflection_point_count++;
- $inflection_u=$u;
- }
- }
- }
- }
- unset($u);
- $mean_score = $sum_score / $count_score;
- $buf='<!-- sum: '.$sum_score.'; count_score: '.$count_score.'; max = ['.$max_count.'] = '.$scores[$max_count].' -->';
- if ($mean_score>=8){
- $buf.='<div class="achievment"><h2>Восторженный ньюфаг</h2><div class="text">Средний балл больше 8. Он должен быть между 5 и 6.</div></div>';
- }
- if (abs($mean_score-5.5)<=0.5){
- $buf.='<div class="achievment achievment-epic"><h2>Правильное отношение</h2><div class="text">Средний балл между 5 и 6. </div></div>';
- }
- if ($mean_score<=4){
- $buf.='<div class="achievment"><h2>Watching anime is suffering</h2><div class="text">Средний балл ниже 4. Прекратите смотреть аниме. Вообще!</div></div>';
- }
- if ($count_score>=500){
- $buf.='<div class="achievment achievment-epic"><h2>Ха-ха, ебать ты говноед)))</h2><div class="text">Вы посмотрели 500 и более тайтлов. '.
- 'Аниме кончилось. Началась манга</div></div>';
- }
- if (($scores[$max_count]<=0.5*$scores[10])and($max_count!==10)){
- $buf.='<div class="achievment achievment-red"><h2>Да ты же поехавший, ты понимаешь?</h2><div class="text">У вас не меньше десяток, чем половина самого '.
- 'частого балла. Смените систему ценностей и проставьте баллы заново</div></div>';
- }
- if ($max_count==8){
- $buf.='<div class="achievment"><h2>Восьмёркобот</h2><div class="text">Ваша самая частая оценка это восемь. При нормальном распределении '.
- 'это невозможно. Пожалуйста, проставьте оценки заново.</div></div>';
- }
- if ($max_count==9){
- $buf.='<div class="achievment"><h2>Счастливая девятка</h2><div class="text">Чаще всего вы ставите девятку. Это уже ни в какие ворота не лезет. </div></div>';
- }
- if ($max_count==10){
- $buf.='<div class="achievment achievment-red"><h2>Пронзив небеса</h2><div class="text">Чаще всего вы ставите десять баллов. Очевидно, что вы либо толстый тролль '.
- 'либо клинический долбоёб. Извините, но адекватных рекомендаций не ждите</div></div>';
- }
- if ($scores[1]==0){
- $buf.='<div class="achievment"><h2>Мне повезло</h2><div class="text">Вы не поставили ни одной единицы. Вам точно не попадалось дно? '.
- 'Попробуйте поставить единицу хотя бы дропу</div></div>';
- }
- if ($scores[1]+$scores[2]+$scores[3]+$scores[4]==0){
- $buf.='<div class="achievment"><h2>Четырёхбальный</h2><div class="text">У вас болезнь ньюфагов. Не бойтесь ставить оценки ниже 5</div></div>';
- }
- if ($scores[10]+$scores[9]==0){
- if ($scores[10]==0){
- $buf.='<div class="achievment"><h2>Мне просто не попалась та самая</h2><div class="text">Вы не поставили ни одной десятки</div></div>';
- }else{
- $buf.='<div class="achievment"><h2>Стивен Сигал</h2><div class="text">Вы безэмоциональны</div></div>';
- }
- }else{
- if (($scores[10]+$scores[9])/$count_score<=0.1){
- $buf.='<div class="achievment"><h2>Вторая сигма</h2><div class="text">У вас мало самых высоких оценок ('.
- round(($scores[10]+$scores[9])/$count_score*100).'%). Это хорошо!</div></div>';
- }
- if ($scores[10]/$count_score<=0.03){
- $buf.='<div class="achievment achievment-epic"><h2>Третья сигма</h2><div class="text">У вас крайне мало десяток ('.
- round($scores[10]/$count_score*100).
- '%). Это прекрасно! Держитесь этого курса. Крупинки эталона слишком редки, чтобы быть везде</div></div>';
- }
- }
- if (($scores[4]+$scores[5]+$scores[6]+$scores[7])/$count_score>=0.8){
- $buf.='<div class="achievment"><h2>Первая сигма</h2><div class="text">У вас очень много оценок в средней зоне. '.
- 'Держитесь этого курса, так и должно быть. БОльшая часть аниме должна не вызывать сильных эмоций, как не вызывает у вас.</div></div>';
- }
- if (abs($max_count-$mean_score)>1){
- $buf.='<div class="achievment"><h2>Сдвиг по фазе</h2><div class="text">Ваша средняя оценка очень далеко от самой частой</div></div>';
- }
- if (abs($max_count-$mean_score)<0.3){
- $buf.='<div class="achievment"><h2>Точка отсчёта</h2><div class="text">Ваша средняя оценка очень близко к самой частой</div></div>';
- }
- if ($inflection_point_count==0){
- $buf.='<div class="achievment"><h2>Генеральная линия партии</h2><div class="text">Ваш график прямой как стержень Сталлиона</div></div>';
- }
- if ($inflection_point_count>2){
- $buf.='<div class="achievment"><h2>Вот такая, понимаешь, загогулина</h2><div class="text">Ваш график выглядит несколько поломанным</div></div>';
- }
- // $buf.='<div class="achievment"><h2>Восторженный ньюфаг</h2><div class="text"></div></div>';
- return $buf;
- }
- function get_info($acc_i, $mode=0){
- global $sad_prefix, $acc, $acc_id;
- list($sad_u1m_sec,$sad_u1s_sec)=explode(' ',microtime());
- $acc=preg_replace('|^ +|', '', $acc_i);
- $acc=preg_replace('| +$|', '', $acc);
- if (preg_match('|[^a-z0-9_-]|i', $acc)){$error='Аккаунт какой-то неправильный, вам не кажется?'; return 1;}
- $q_c=mysql_fetch_assoc(mysql_query('select `id`, `lasttime` from `'.$sad_prefix.'mal_accounts` where `sname` like "'.$acc.'"'));
- if ((int)$q_c['id']<1){
- if ($mode==1){return 2;}
- mysql_query('insert into `'.$sad_prefix.'mal_accounts` (`sname`) values ("'.$acc.'");');
- $acc_id=mysql_insert_id();
- }else{$acc_id=(int)$q_c['id'];}
- if ($q_c['lasttime']>=time()-3*24*3600){
- // if ($mode==1){get_full_list($acc_id);}
- return 0;
- }
- mysql_query('update `'.$sad_prefix.'_options` set `mal_last`=UNIX_TIMESTAMP() where `id`=1;');
- // list($sad_u2m_sec,$sad_u2s_sec)=explode(' ',microtime());
- $q=mysql_query('select * from `'.$sad_prefix.'mal_views` where `parent`='.$acc_id);
- $animes=array();while ($q_c=mysql_fetch_assoc($q)){$animes[(int)$q_c['anime_id']]=$q_c;}
- // list($sad_u3m_sec,$sad_u3s_sec)=explode(' ',microtime());
- $ch =curl_init('http://myanimelist.net/malappinfo.php?status=all&u='.$acc);
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
- curl_setopt($ch, CURLOPT_HTTPHEADER,
- array('Connection: close',
- 'user_agent: ELinks/0.11.7 (textmode; FreeBSD 8.3-STABLE amd64; 125x41-2)',
- 'accept: */*',
- 'accept_language: en',
- 'accept_encoding: gzip'));
- // curl_setopt($ch, CURLOPT_INTERFACE, '62.109.3.66');
- $buf=curl_exec($ch);
- foreach (array(15, ) as $code){
- $buf=str_replace(chr($code), ' ', $buf);
- }
- $fo=fopen($GLOBALS['sad_root'].'/last-mal-account.xml', 'w');
- fwrite($fo, $buf);
- fclose($fo);
- // list($sad_u4m_sec,$sad_u4s_sec)=explode(' ',microtime());
- $xml=sad_xml_rawtext($buf);
- if ($xml->childNodes->item(0)->nodeName=='error'){$error='Такого пользователя на MAL\'е не существует'; return 3;}//not found
- list($sad_u5m_sec,$sad_u5s_sec)=explode(' ',microtime());
- $n_a=array();
- for ($i=1;$i<$xml->childNodes->length;$i++){
- // list($sad_ua1m_sec,$sad_ua1s_sec)=explode(' ',microtime());
- $node =$xml->childNodes->item($i);
- if ($node->nodeName!=='anime'){continue;}
- $a_id =(int)sad_xml_getnode($node, 'series_animedb_id#');$n_a[$a_id]=false;
- $score =(int)sad_xml_getnode($node, 'my_score#');
- $status=(int)sad_xml_getnode($node, 'my_status#');
- list($sad_ua2m_sec,$sad_ua2s_sec)=explode(' ',microtime());
- // eval('echo \'<br />A1 <b>\'.(($sad_ua2s_sec+$sad_ua2m_sec)-($sad_ua1s_sec+$sad_ua1m_sec)).\'</b>\';');
- if (isset($animes[$a_id])){
- //Аниме уже было в списке
- // echo '<br>'.$animes[$a_id]['score'].'; '.$score.' / '.$animes[$a_id]['status'].' ; '.$status;
- if ((int)$animes[$a_id]['score']!==$score or (int)$animes[$a_id]['status']!==$status){
- mysql_query('update `'.$sad_prefix.'mal_views` set `score`='.$score.', `status`='.$status.' where `id`='.$animes[$a_id]['id']);
- // echo '<br>update; ';
- }
- }else{
- //Нечто новое!
- mysql_query('insert into `'.$sad_prefix.'mal_views` (`parent`, `anime_id`, `score`, `status`) values ('.$acc_id.', '.$a_id.', '.$score.', '.$status.');');
- }
- }
- unset($node);
- // list($sad_u6m_sec,$sad_u6s_sec)=explode(' ',microtime());
- //Добавляем аниме в базу данных
- $sql='';foreach($n_a as $id => $t){$sql.=', '.$id;}
- $q=mysql_query('select `id` from `'.$sad_prefix.'mal_anime` where `id` in ('.substr($sql, 1).')and(`lasttime`>0)');
- while ($q_c=mysql_fetch_assoc($q)){$n_a[$q_c['id']]=true;}$u=false;$anime_add=array();
- // list($sad_u7m_sec,$sad_u7s_sec)=explode(' ',microtime());
- foreach($n_a as $id => $t){
- if ($t){continue;}
- curl_setopt($ch, CURLOPT_URL, 'http://myanimelist.net/anime/'.$id.'/a/userrecs');
- if ($u and false){sleep(2);}$buf=curl_exec($ch);$u=true;
- // list($sad_u8m_sec,$sad_u8s_sec)=explode(' ',microtime());
- preg_match('|<title>(.+) +\\- MyAnimeList.net</title>|', $buf, $b);$title=$b[1];
- preg_match('|<span class="dark_text">Score:</span>[ \\t]+([0-9.]+)|i', $buf, $b);$score=(int)(100*$b[1]);
- if (iamd()){echo $title.' / '.$score.'<br/>';}
- unset($buf);
- //оставляем только список
- $buf=substr($buf, strpos('<h2>Recommendations Submitted by Users</h2>', $buf), strlen($buf));
- $a=explode('<div class="borderClass">', $buf);unset($a[0], $buf);
- // list($sad_u9m_sec,$sad_u9s_sec)=explode(' ',microtime());
- $sql='';$sql1='';
- foreach ($a as $b){
- if (!preg_match('|http://myanimelist.net/anime/([0-9]+)/([^"]+)|i', $b, $c)){continue;}
- preg_match('|by <strong>([0-9]+)|i', $b, $d);$d[1]=(int)$d[1]+1;
- $sql .=', ('.min($id, (int)$c[1]).', '.max($id, (int)$c[1]).', '.$d[1].')';
- $anime_add[(int)$c[1]]=str_replace('_', ' ', $c[2]);
- }
- /* echo sad_safe_html('delete from `'.$sad_prefix.'mal_rec` where (`a1`='.$id.')or(`a2`='.$id.');').'<br>';
- echo sad_safe_html('insert into `'.$sad_prefix.'mal_rec` (`a1`, `a2`, `count`) values '.substr($sql, 1).';').'<br>';
- echo sad_safe_html('delete from `'.$sad_prefix.'mal_anime` where (`id`='.$id.');').'<br>';
- echo sad_safe_html('insert into `'.$sad_prefix.'mal_anime` (`id`, `title`, `score`, `lasttime`) values ('.$id.', "'.sad_safe_mysql($title).'", '.$score.', UNIX_TIMESTAMP());').'<br>';
- list($sad_u10m_sec,$sad_u10s_sec)=explode(' ',microtime());
- for ($tmp=2;$tmp<=10;$tmp++){
- 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/>\';');
- }
- return 4; */
- mysql_query('delete from `'.$sad_prefix.'mal_rec` where (`a1`='.$id.')or(`a2`='.$id.');');
- mysql_query('insert into `'.$sad_prefix.'mal_rec` (`a1`, `a2`, `count`) values '.substr($sql, 1).';');
- mysql_query('delete from `'.$sad_prefix.'mal_anime` where (`id`='.$id.');');
- mysql_query('insert into `'.$sad_prefix.'mal_anime` (`id`, `title`, `score`, `lasttime`) values ('.$id.', "'.sad_safe_mysql($title).'", '.$score.', UNIX_TIMESTAMP());');
- // break;
- }
- if ($u){mysql_query('optimize table `'.$sad_prefix.'mal_rec`;');}
- mysql_query('update `'.$sad_prefix.'mal_accounts` set `lasttime`=UNIX_TIMESTAMP() where `id`='.$acc_id);
- //Добавляем аниме, которое было в рекомендациях
- $sql='';foreach ($anime_add as $id => $t){$sql.=', '.$id;}
- $q=mysql_query('select `id` from `'.$sad_prefix.'mal_anime` where `id` in ('.substr($sql, 1).')');
- while ($q_c=mysql_fetch_assoc($q)){unset($anime_add[$q_c['id']]);}
- $sql='';foreach ($anime_add as $id => $t){$sql.=', ('.$id.', "'.sad_safe_mysql($t).'")';}
- mysql_query('insert into `'.$sad_prefix.'mal_anime` (`id`, `title`) values '.substr($sql, 1));
- return 0;
- }
- function get_collaboration($anime_list){
- global $sad_prefix;
- $new_list=array();
- echo '<table>';
- $sql='';$k=0;
- foreach ($anime_list as $id => $score){
- if ($score==0){continue;}
- $sql='select `title2` as `other_id`, `vector` from `'.$sad_prefix.'mal_titles_intersect` where (`title1`='.$id.')and(abs(`vector`)>=0.20)
- union
- select `title1`, `vector` from `'.$sad_prefix.'mal_titles_intersect` where (`title2`='.$id.')and(abs(`vector`)>=0.20);';
- $q=mysql_query($sql);
- while ($q_c=mysql_fetch_assoc($q)){
- $otid =(int)$q_c['other_id'];
- $vector=(float)$q_c['vector'];
- /* if (($otid==12355)and(iam())){
- echo '<tr><td>'.$id.'</td><td>'.($vector*$score).'</td></tr>';
- } */
- if (!isset($new_list[$otid])){$new_list[$otid]=array(0,0,0);}
- $new_list[$otid][0]+=$vector*$score;
- $new_list[$otid][1]+=($score>0) ? $vector*$score : 0;
- $new_list[$otid][2]++;
- }
- // if ($k++>10){echo 'dbg_break;';break;}
- }
- echo '</table>';
- foreach ($anime_list as $id => $score){
- unset($new_list[$id]);
- }
- /* foreach ($new_list as $id => $a){
- if ($new_list[$id][0]<0){unset($new_list[$id]);}
- } */
- return $new_list;
- }
- function get_color($num){
- return '#55f';
- }
- ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement