<meta property="og:type" content="article" />
<meta property="og:title" content="Новый руководитель «Кинопоиска» объявил об уходе части команды проекта" />
<meta property="og:description" content="Дмитрий Степанов, который занял пост главы «Кинопоиска» Ольги Мансуровой после перезапуска проекта, объявил об уходе части команды сайта в рамках её реформирования. Об этом vc.ru сообщили представители «Яндекса», который владеет «Кинопоиском»." />
<meta property="og:url" content="https://vc.ru/p/kino-cut" />
<meta property="og:image" content="https://static44.siliconrus.cmtt.ru/paper-preview-fox/k/in/kino-cut/6bea59ee509b-original.jpg" />
<meta property="og:site_name" content="vc.ru" />
<meta property="fb:app_id" content="499950920109990" />
<meta property="twitter:card" content="summary_large_image" />
<meta property="twitter:title" content="Новый руководитель «Кинопоиска» объявил об уходе части команды проекта" />
<meta property="twitter:description" content="Дмитрий Степанов, который занял пост главы «Кинопоиска» Ольги Мансуровой после перезапуска проекта, объявил об уходе части команды сайта в рамках её реформирования. Об этом vc.ru сообщили представители «Яндекса», который владеет «Кинопоиском»." />
<meta property="twitter:image" content="https://static44.siliconrus.cmtt.ru/paper-preview-fox/k/in/kino-cut/6bea59ee509b-original.jpg" />
<meta property="twitter:site" content="@vcru" />
<meta property="twitter:creator" content="@faddei_frodo" />
<meta property="twitter:url" content="https://vc.ru/p/kino-cut" />
<meta property="twitter:app:name:iphone" content="«Цукерберг позвонит» — новости и статьи из мира IT" />
<meta property="twitter:app:id:iphone" content="920638420" />
<meta property="author" content="Андрей Фролов" />
<meta property="twitter:app:url:iphone" content="vc://paper/11234" />
<meta property="al:ios:url" content="vc://paper/11234" />
<meta property="al:ios:app_store_id" content="920638420" />
<meta property="al:ios:app_name" content="«Цукерберг позвонит» — новости и статьи из мира IT" />
<meta property="al:android:url" content="vc://paper/11234" />
<meta property="al:android:package" content="ru.artrobot.siliconrus" />
<meta property="al:android:app_name" content="«Цукерберг позвонит» — новости и статьи из мира IT" />
от которого меня отпугивает только отсутствия свойств уровня класса.
// The ES6+ way
class Video extends React.Component {
static defaultProps = {
autoPlay: false,
maxLoops: 10,
}
static propTypes = {
autoPlay: React.PropTypes.bool.isRequired,
maxLoops: React.PropTypes.number.isRequired,
posterFrameSrc: React.PropTypes.string.isRequired,
videoSrc: React.PropTypes.string.isRequired,
}
state = {
loopsRemaining: this.props.maxLoops,
}
}
<?php
require_once('parserutils.class.php');
class RSSParser implements Iterator {
private $position = 0;
private $rss = [];
public function __construct($rss) {
$this->position = 0;
$tmp = ParserUtils::normalizeXML($rss->channel);
if(!empty($tmp['item'])){
$this->rss = $tmp['item'];
}
}
function rewind() {
$this->position = 0;
}
function current() {
$c = $this->rss[$this->position];
return ParserUtils::constructRssItem(
$c->title,
$c->link,
$c->description,
$c->pubDate
);
}
function key() {
return $this->position;
}
function next() {
++$this->position;
}
function valid() {
return isset($this->rss[$this->position]);
}
public static function check($rss){
return !(empty($rss) || empty($rss->channel) || empty($rss->channel->item));
}
}
?>
<?php
class AtomParser implements Iterator {
private $position = 0;
private $rss = [];
public function __construct($rss) {
$this->position = 0;
$tmp = ParserUtils::normalizeXML($rss);
if(!empty($tmp['entry'])){
$this->rss = $tmp['entry'];
}
}
function rewind() {
$this->position = 0;
}
function current() {
$c = $this->rss[$this->position];
$lastLink = null;
foreach ($c->link as $vl) {
$lastLink = $vl;
if($vl['type'] == "text/html"){
break;
}
}
return ParserUtils::constructRssItem(
$c->title,
$lastLink["href"],
$c->content,
$c->updated
);
}
function key() {
return $this->position;
}
function next() {
++$this->position;
}
function valid() {
return isset($this->rss[$this->position]);
}
public static function check($rss){
return !(empty($rss) || empty($rss->entry));
}
}
?>
<?php
require_once('RollingCurl.php');
class ParserUtils
{
final private function __construct() {}
final private function __clone() {}
static $curlOpt = [CURLOPT_USERAGENT => "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.52 Safari/537.17"];
public static function normalizeXML ($xmlObject)
{
$res = [];
foreach ( (array) $xmlObject as $index => $node ){
$res[$index] = ( is_object ( $node ) ) ? self::normalizeXML ( $node ) : $node;
}
return $res;
}
public static function constructRssItem($title, $link, $content, $update){
$content = preg_replace('/\[crayon-.+\]/U','',trim($content));
$title = trim(strip_tags($title));
$update = date('Y-m-d H:i:s',strtotime($update));
return $res = [
'content'=>$content,
'update'=>$update,
'title'=>$title,
'link'=>trim(strip_tags($link))
];
}
public static function multiDownLoad($urls, $threadCount = 0){
$result = [];
if($threadCount <= 0){
$threadCount = count($urls);
}
$rc = new RollingCurl(function($response, $info, $request) use(&$result){
if( $info["http_code"] == 200 && !empty($response)){
$result[$request->url] = $response;
}
});
$rc->window_size = $threadCount;
foreach ($urls as $url) {
$rc->get($url, null, self::$curlOpt);
}
$rc->execute();
return $result;
}
public static function download($url){
$result = null;
$rc = new RollingCurl(function($response, $info, $request) use(&$result){
if( $info["http_code"] == 200 && !empty($response)){
$result = $response;
}
});
$rc->get($url, null, self::$curlOpt);
$rc->execute();
return $result;
}
}
?>
public static function getParser($raw_content){
$rss = simplexml_load_string($raw_content, 'SimpleXMLElement', LIBXML_NOWARNING | LIBXML_NOERROR);
if(RSSParser::check($rss)){
return new RSSParser($rss);
}else if(AtomParser::check($rss)){
return new AtomParser($rss);
}else{
return null;
}
}
Из минусов:
Дублирование классов и очень много..
2) Вынести стили в разные файлы и подключать по отдельности, при клике на переключатель страница сайта обновится и подключиться файл css с другой темой.