EIOS/rabprog/inc/class_LIBRARY.php

289 lines
34 KiB
PHP
Raw Permalink Normal View History

2023-12-28 15:39:22 +03:00
<?php
class class_LIBRARY{
const url = 'http://lib.mkgtu.ru:8004/catalog/fol2'; // для ручного парсера
const url_json = 'http://lib.mkgtu.ru/?task=getbooks';
function __construct(){
}
/**
* Получение литературы JSON!
* @param string $disciplina
* @param string $base
* @param array $pages
* @return array|mixed
*/
function get_literatura($disciplina='',$database=''){
if($disciplina!='') {
$disciplina = mb_strtolower($disciplina);
$ddir = 'upload/libs/';
if ($database != '') {
$ddir = 'upload/libs/' . $database . '/';
if (!file_exists($ddir)) mkdir($ddir);
}
$file_cache = $ddir . $disciplina . '.json';
$m1 = array('&nbsp;', "&nbsp;");
$m2 = array(' ', ' ');
$cache=false;
if (file_exists($file_cache)) {
$ftime = filectime($file_cache);
if($ftime > ( time()-(3600*24) )) {
$out = json_decode(file_get_contents($file_cache), 1);
$cache=true;
}
}
if(!$cache){
$url = self::url_json . '&data=' . urlencode($disciplina) . '&database=' . $database;
$html = file_get_contents($url);
$html = str_replace($m1, $m2, strip_tags($html));
$out = json_decode($html, 1);
foreach ($out as $k => $v) {
if (isset($v['URL'])) {
if (strpos($v['URL'], 'http') === false) {
$out[$k]['URL'] = 'http://' . $v['URL'];
}
}
}
if (count($out)) {
file_put_contents($file_cache, json_encode($out, JSON_UNESCAPED_UNICODE));
}
}
}else{
$out=array();
}
return $out;
}
/**
* Получение ресурсов по направлению
* @param $naprav
* @return void
*/
function get_proBD($DISCIPS){
//echo '<pre>'.print_r($DISCIPS,1).'</pre>'; exit();
/*Array(
[Заочная] => Array([uchebplan] => Array() [title] => Array([shifr] => 35.03.04 [naprav] => Агрономия )
[Очная] => Array( [uchebplan] => Array() [title] => Array([shifr] => 35.03.04 [naprav] => Агрономия )
)
* */
$shifr = ''; $naprav = '';
if(isset($DISCIPS['Очно-заочная'])) $shifr = $DISCIPS['Очно-заочная']['title']['shifr']; $naprav = $DISCIPS['Очная']['title']['naprav'];
if(isset($DISCIPS['Заочная'])) $shifr = $DISCIPS['Очная']['title']['shifr']; $naprav = $DISCIPS['Очная']['title']['naprav'];
if(isset($DISCIPS['Очная'])) $shifr = $DISCIPS['Очная']['title']['shifr']; $naprav = $DISCIPS['Очная']['title']['naprav'];
$url = 'http://lib.mkgtu.ru/index.php/napravleniya-podgotovki';
$file_cache = 'upload/libs/np_'.$shifr.'.json';
if(file_exists($file_cache)){
$out = json_decode(file_get_contents($file_cache),1);
}else {
$html = file_get_contents($url);
$url2 = $this->HTML_parseBD($html,$shifr);
$out = $this->HTML_parseBD_step2($url2);
file_put_contents($file_cache,json_encode($out));
}
//echo $shifr.'<br>'.$url.'<pre>'.print_r($DISCIPS,1).print_r($out,1).'</pre>';exit();
return $out;
}
//Находим нужную ссылку
function HTML_parseBD($html,$shifr){
$out=array();
//echo '<pre>'.htmlspecialchars($html).'</pre>'; exit();
//<h3 class="page-header item-title"><a href="/index.php/napravleniya-podgotovki/124-agroinzheneriya-35-03-06">Агроинженерия (35.03.06)</a>
$pattern = '<h3 class="page-header item-title"><a href="(.*)">(.*)</a>';
preg_match_all('|'.$pattern.'|isU',$html,$arr);
$pages=array();
if(isset($arr[2])&&count($arr[2])){
foreach($arr[2] as $k => $v){
$pages[]=array('name'=>trim($v),'url'=>'http://lib.mkgtu.ru'.$arr[1][$k]);
}
}
//echo '<pre>'.print_r($pages,1).'</pre>'; exit();
//Array([0] => Array([name] => Агроинженерия (35.03.06) [url] => http://lib.mkgtu.ru/index.php/napravleniya-podgotovki/124-agroinzheneriya-35-03-06 )
foreach($pages as $k => $v){
if(mb_strpos($v['name'],trim($shifr))){//нашли шифр
$out = $v['url'];
}
}
return $out;
}
//Берем литературу
function HTML_parseBD_step2($url){
$out=array();
$html = file_get_contents($url);
//echo $html; exit();
$pattern = '<div class="category-desc">(.*)</div>';
$pattern = '<div class="category-desc">(.*)</div>.*</div>.*</div>';
preg_match_all('|'.$pattern.'|isU',$html,$arr);
//echo '<pre>'.print_r($arr,1).'</pre>'; exit();
$what = $arr[0][0]; if(mb_strlen($arr[1][0])>mb_strlen($arr[0][0])) $what = $arr[1][0];
if(isset($arr[0][0])){
$text = $what;
//надо определить заголовки в странице
$zaga = array('Электронно-библиотечные системы','Электронные библиотеки','Архивы научных журналов','Ресурсы Интернет открытого доступа','Зарубежные ресурсы');
//,'Периодические издания доступные обучающимся и сотрудникам ФГБОУ ВО МГТУ по подписке и на основании контрактов и лицензионных соглашений'
$zaga_items=array();
foreach ($zaga as $k => $v){
$pos = strpos($text,$v);
if($pos!==false) $zaga_items[$pos] = $v;
}
//echo '<pre>'.print_r($zaga_items,1).'</pre>'; exit();
$ki=0; foreach ($zaga_items as $k => $v){
if($ki) {
//$starttext = $zaga_items[$ki - 1];
$endtext = $v;
//echo $starttext.'-'.$endtext.'<br>';
$t1 = $this->getText_Megdu($text, $starttext, $endtext);// '>'.$endtext. '<'
if ($t1 != '') {
preg_match_all('|<p.*>(.*)</p>|isU', $t1, $arr);
if (count($arr[1])) $out[$starttext] = $arr[1];
}
}
$starttext = $v;
$ki++;
}
$t1 = $this->getText_Megdu($text,'>'.$endtext,'>Дата актуализации');
if($t1!='') {
preg_match_all('|<p.*>(.*)</p>|isU', $t1, $arr);
if (count($arr[1])) $out[$endtext] = $arr[1];
}
//echo '<pre>'.print_r($out,1).'</pre>'; exit();
/*
$t1 = $this->getText_Megdu($text,'Электронно-библиотечные системы','>Электронные библиотеки<');
if($t1!='') {
preg_match_all('|<p.*>(.*)</p>|isU', $t1, $arr);
if (count($arr[1])) $out['Электронно-библиотечные системы'] = $arr[1];
}
$t1 = $this->getText_Megdu($text,'>Электронные библиотеки<','>Архивы научных журналов<');
if($t1!='') {
preg_match_all('|<p.*>(.*)</p>|isU', $t1, $arr);
if (count($arr[1])) $out['Электронные библиотеки'] = $arr[1];
}
//echo '<pre>'.print_r($out,1).'</pre>'; exit();
$t1 = $this->getText_Megdu($text,'>Архивы научных журналов<','>Ресурсы Интернет открытого доступа');
if($t1!='') {
preg_match_all('|<p.*>(.*)</p>|isU', $t1, $arr);
if (count($arr[1])) $out['Архивы научных журналов'] = $arr[1];
}
$t1 = $this->getText_Megdu($text,'>Ресурсы Интернет открытого доступа','>Зарубежные ресурсы<');
if($t1!='') {
preg_match_all('|<p.*>(.*)</p>|isU', $t1, $arr);
if (count($arr[1])) $out['Ресурсы Интернет открытого доступа'] = $arr[1];
}
$t1 = $this->getText_Megdu($text,'>Зарубежные ресурсы<','>Дата актуализации');
if($t1!='') {
preg_match_all('|<p.*>(.*)</p>|isU', $t1, $arr);
if (count($arr[1])) $out['Зарубежные ресурсы'] = $arr[1];
}*/
}
//echo '<pre>'.print_r($out,1).'</pre>'; exit();
$out1=array();
foreach($out as $tip => $val)
foreach($val as $k => $text){
$text = html_entity_decode($text);
$text = str_replace("&nbsp;",' ',$text);
$text = str_replace(' ',' ',$text);
$text = str_replace(' ',' ',$text);
$text = str_replace(' ',' ',$text);
if(mb_strlen(trim(strip_tags($text)))>10) {
$hrefs = $this->getText_HREF($text);
$out1[$tip][$k] = array('html' => $text, 'text' => strip_tags($text), 'urls' => $hrefs);
}
}
//echo '<pre>'.print_r($out1,1).'</pre>'; exit();
return $out1;
}
/**
* Получаем текст между текстами
* @param $text
* @param $str1
* @param $str2
* @return mixed|string
*/
function getText_Megdu($text,$str1,$str2){
$out='';
preg_match_all('|'.$str1.'(.*)'.$str2.'|isU',$text,$arr);
if(isset($arr[1][0])){
$out = $arr[1][0];
}
return $out;
}
/**
* Получаем список ссылок в тексте
* @param $text
* @return array
*/
function getText_HREF($text){
$out = array();
preg_match_all('|<a.*href="(.*)">|isU',$text,$arr);
if(isset($arr[1])&&count($arr[1])){
$out = array_unique($arr[1]);
}
return $out;
}
/**
* Получение литературы ПАРСИМ!
* 000001 Электронный каталог
* 000530 Учебники, учебные пособия (МГТУ) (669)
* 0007AA Учебно-методические пособия, методические материалы (МГТУ) (3494)
* @param string $disciplina
* @param string $base
* @param array $pages
* @return array|mixed
*/
function get_literatura_parse($disciplina='',$base='000001',$pages=array()){
//000001 Электронный каталог&nbsp;
//000530 Учебники, учебные пособия (МГТУ)&nbsp;(669)
//0007AA Учебно-методические пособия, методические материалы (МГТУ)&nbsp;(3494)
/*BASE: 000530 FIELD: 0051 ACTION0: равно DATA0: Математика Knopka: Найти*/
$file_cache = 'upload/libs/'.$disciplina.'.json';
if(file_exists($file_cache)){
$out = json_decode(file_get_contents($file_cache),1);
}else {
$html = file_get_contents(self::url . '?BASE='.$base.'&FIELD=0051&ACTION0=%D1%80%D0%B0%D0%B2%D0%BD%D0%BE&DATA0=' . $disciplina . '&Knopka=%D0%9D%D0%B0%D0%B9%D1%82%D0%B8');
$out = $this->HTML_parse($html);
unset($out['pages']);
file_put_contents($file_cache,json_encode($out['items']));
}
return $out;
//http://lib.mkgtu.ru:8004/catalog/fol2?BASE=000530&FIELD=0051&ACTION0=%D1%80%D0%B0%D0%B2%D0%BD%D0%BE&DATA0=%D0%9C%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0&Knopka=%D0%9D%D0%B0%D0%B9%D1%82%D0%B8
//http://lib.mkgtu.ru:8004/catalog/fol2?SHOW+FP126++12+-1+-1+000530
//http://lib.mkgtu.ru:8004/catalog/fol2?SHOW+FP126++24+-1+-1+000530
//http://lib.mkgtu.ru:8004/catalog/fol2?BASE=000001&FIELD=0051&ACTION0=%D1%80%D0%B0%D0%B2%D0%BD%D0%BE&DATA0=%D0%9C%D0%B0%D1%82%D0%B5%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0&Knopka=%D0%9D%D0%B0%D0%B9%D1%82%D0%B8
}
function HTML_parse($html){
$out=array();
$pattern = '>\[(.*)-(.*)\]</A';
preg_match_all('|'.$pattern.'|isU',$html,$arr);
$pages=array();
if(isset($arr[2])&&count($arr[2])){
$pages=$arr[2];
}
$out['pages'] = $pages;
$pattern = '<TABLE><TR><TD><B>(.*)<BR>(.*)&nbsp;&nbsp;&nbsp;&nbsp;(.*)<BR>(.*)</B><BR><I>(.*)</I><a href="(.*)" target=_blank>.*<img src="/img/strelki.gif.*<li';
preg_match_all('|'.$pattern.'|isU',$html,$arr,PREG_SET_ORDER);
foreach($arr as $k => $v){
unset($v[0]);
$tmp = array();
foreach($v as $k1 => $v1){ $tmp[] = trim(strip_tags($v1)); }
$out['items'][] = $tmp;
}
//echo '<pre>'.print_r($out,1).'</pre>';exit();
return $out;
}
/*<center> 1-12&nbsp<A href="/catalog/fol2?SHOW+FP128++12+-1+-1+000530">[13-24]</A>&nbsp; <A href="/catalog/fol2?SHOW+FP128++24+-1+-1+000530">[25-36]</A>&nbsp; <A href="/catalog/fol2?SHOW+FP128++36+-1+-1+000530">[37-48]</A>&nbsp; <A href="/catalog/fol2?SHOW+FP128++48+-1+-1+000530">[49-60]</A>&nbsp; <A href="/catalog/fol2?SHOW+FP128++60+-1+-1+000530">[61-72]</A>&nbsp; <A href="/catalog/fol2?SHOW+FP128++72+-1+-1+000530">[73-82]</A>&nbsp; </center> <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <input type="checkbox" value="1" class="checkbox" id="selall">Выбрать все на странице<BR> <ol> <li class=ab value=1><input type=checkbox name="CHK081307000001" class="mc">&nbsp;<BR>
<TABLE><TR><TD><B>51(07)<BR>Д 30&nbsp;&nbsp;&nbsp;&nbsp;Демина, Т.И. (Майкопский государственный технологический университет).<BR>&nbsp;&nbsp;&nbsp; Математика и основы медицинской статистики : учебное пособие [Электронный ресурс] / Демина Т.И., Чуяко Е.Б. ; ФГБОУ ВО Майкоп. гос. технол. ун-т</font>. - Майкоп : МГТУ, 2020. - 158 с. - Библиогр.: с. 156-157 (13 назв.)</B><BR><I>Медицинская статистика должна быть нацелена на решение наиболее выраженных современных проблем в здоровье населения. Основными проблемами здесь, как известно, являются необходимость снижения заболеваемости, смертности и увеличения продолжительности жизни населения.</I><a href="/catalog/fol2?SHOW_ONE_BOOK+081307" target=_blank>&nbsp;<img src="/img/strelki.gif" width=11 height=8 border=0></a> <BR></TD></TR></TABLE> <div class="rating" id="rating_081307"> </div> <div align=right> &nbsp;<A HREF="http://lib.mkgtu.ru/?redirect=http%3A%2F%2Flib.mkgtu.ru%3A8002%2Flibdata.php%3Fid%3D2100052105%26DOK%3D081307%26BASE%3D000530" target=_blank> Полный текст </A></div><BR><BR>
<li class=ab value=2><input type=checkbox name="CHK07A8E2000001" class="mc">&nbsp;<BR>
<TABLE><TR><TD><B>519.86(07)<BR>М 22&nbsp;&nbsp;&nbsp;&nbsp;Мамадалиева, Л.Н. (Майкопский государственный технологический университет).<BR>&nbsp;&nbsp;&nbsp; Обучение математическим методам обработки экспериментальных данных в русле компетентностного подхода : учебное пособие / Л.Н. Мамадалиева, И.М. Хаконова</font>. - Майкоп : Кучеренко В.О., 2018. - 100 с. - Прил.: с. 81-100. - Библиогр.: с. 79-80 (21 назв.)</B><BR><I>Учебное пособие содержит краткие теоретические сведения о применении методов математической статистики, методические рекомендации по организации обучения математическому моделированию экспериментальных данных.</I><a href="/catalog/fol2?SHOW_ONE_BOOK+07A8E2" target=_blank>&nbsp;<img src="/img/strelki.gif" width=11 height=8 border=0></a> <BR></TD></TR></TABLE> <div class="rating" id="rating_07A8E2"> </div> <div align=right> <A HREF="/catalog/fol2?SHOW_DOK+07A8E2+000001" onClick='openWindow(this,"mmm")'>Сведения о наличии</A> &nbsp;<A HREF="http://lib.mkgtu.ru/?redirect=http%3A%2F%2Flib.mkgtu.ru%3A8002%2Flibdata.php%3Fid%3D2100048762%26DOK%3D07A8E2%26BASE%3D000530" target=_blank> Полный текст </A></div><BR><BR>
<li class=ab value=3><input type=checkbox name="CHK07B8BA000001" class="mc">&nbsp;<BR><TABLE><TR><TD><B>51(07)<BR>Ч-96&nbsp;&nbsp;&nbsp;&nbsp;Чуяко, Е.Б. (Майкопский государственный технологический университет).<BR>&nbsp;&nbsp;&nbsp; Основы математики для инженеров и экономистов : учебное пособие / Е.Б. Чуяко ; [ФГБОУ ВПО Майкоп. гос. технол. ун-т , Каф. высш. математики и систем. анализа]</font>. - Майкоп : Кучеренко В.О., 2018. - 190 с. - Библиогр.: с. 190 (9 назв.)</B><BR><I>Пособие содержит набор тестовых заданий с подробными решениями по математике, теоретические сведения и набор стандартных задач для самостоятельного решения.</I><a href="/catalog/fol2?SHOW_ONE_BOOK+07B8BA" target=_blank>&nbsp;<img src="/img/strelki.gif" width=11 height=8 border=0></a> <BR></TD></TR></TABLE> <div class="rating" id="rating_07B8BA"> </div> <div align=right> <A HREF="/catalog/fol2?SHOW_DOK+07B8BA+000001" onClick='openWindow(this,"mmm")'>Сведения о наличии</A> &nbsp;<A HREF="http://lib.mkgtu.ru/?redirect=http%3A%2F%2Flib.mkgtu.ru%3A8002%2Flibdata.php%3Fid%3D2100047763%26DOK%3D07B8BA%26BASE%3D000530" target=_blank> Полный текст </A></div><BR><BR> <li class=ab value=4><input type=checkbox name="CHK03A585000001" class="mc">&nbsp;<BR><TABLE><TR><TD><B>519.2(07)<BR>К 89&nbsp;&nbsp;&nbsp;&nbsp;Куижева, С.К. (Майкопский государственный технологический университет).<BR>&nbsp;&nbsp;&nbsp; Практикум по теории вероятностей и математической статистики для экономистов : учебное пособие / С.К. Куижева, Л.Ж. Паланджянц, О.П. Шевякова</font>. - Ижевск : Пермяков С.А., 2014. - 134 с. - Прил.: с. 129-132. - Библиогр.: с. 133 (9 назв.)</B><BR><I>В пособии приводится теоретический материал, предназначенный для решения типовых задач, а также задания для самостоятельной и контрольной работы.</I><a href="/catalog/fol2?SHOW_ONE_BOOK+03A585" target=_blank>&nbsp;<img src="/img/strelki.gif" width=11 height=8 border=0></a> <BR></TD></TR></TABLE> <div class="rating" id="rating_03A585"> </div> <div align=right> <A HREF="/catalog/fol2?SHOW_DOK+03A585+000001" onClick='openWindow(this,"mmm")'>Сведения о наличии</A> &nbsp;<A HREF="http://lib.mkgtu.ru/?redirect=http%3A%2F%2Flib.mkgtu.ru%3A8002%2Flibdata.php%3Fid%3D1000052984%26DOK%3D03A585%26BASE%3D000530" target=_blank> Полный текст </A></div><BR><BR> <li class=ab value=5><input type=checkbox name="CHK03A589000001" class="mc">&nbsp;<BR><TABLE><TR><TD><B>51(07)<BR>Д 30&nbsp;&nbsp;&nbsp;&nbsp;Демина, Т.И. (Майкопский государственный технологический университет). Математика. 2 семестр : учебно-методическое пособие для студентов направлений : 081100.62 "Государственное и муниципальное управление", 080200.62 "Менеджмент" / Т.И. Демина, С.К. Куижева, О.П. Шевякова</font>. - Ижевск : Пермяков С.А., 2014. - 98 с. - Прил.: с. 93-98. - Библиогр.: с. 5 (16 назв.)</B><BR><I>Пособие содержит список литературы необходимой для изучения тем курса, методические рекомендации, а также типовые задания по каждому разделу.</I><a href="/catalog/fol2?SHOW_ONE_BOOK+03A589
* */
}