RSS — парсер


Содержание

Парсим RSS Ленту. Инструкция для новичков.

Напишем свой парсер RSS для drupal?

Довольно часто может встать вопрос ребром о том, как парсить чей нибудь RSS поток ?
RSS – это семейство XML-форматов

Парсить в данном случае является синонимом разбить на части. Тоесть нам необходимо разбить интересующую нас ленту на части.

Для этого нам можно использовать следуший код (код помог дописать владелец Трогательной СЕОРЕПЫ – nekto )

$url = «http://адрес-того-чтопарсим/rssf.php"; // присваиваем переменной урл адрес фида, который будем парсить
$xml = xml_parser_create(); // создаем парсер xml
xml_parser_set_option($xml, XML_OPTION_SKIP_WHITE,1); устанавливают опцию что могут быть пробелы
xml_parse_into_struct($xml, file_get_contents($url), $ELEM, $FREQ); парсит хмл документ в массив Элементов и массив заголовков file_get_contents($url) — берет контент с указанного урла (или файла с сервера)ю
xml_parser_free($xml); закрывает парсер.

после этого в массивах ELEM — хуева туча элементов. а в массиве FREQ описание типов этих элементов.

Собственно вот это сверху написано и является парсером -). Ведь тут мы все разбили на части.
Сомневающиеся могут попробовать сделать вывод

print_r($FREQ);
print_r($ELEM);

и увидят что все уже «распарсено».


Что делать с этим парсером дальше, каждый решает сам:

  • можно сразу выводить через echo, можно запихнуть данные в массив и потом вывести, или в нужном формате записать в файлик, который потом вставлять в свою страничку через include.
  • Из идей к применению…можно к примеру парсить прямой эфир яндекса и составлять БД на бодубии БД Пастухова ;-) для послещующего составления семантических ядер.
  • А можно просто сделать небольную новостную колонку.Снизу приведу пример без комментариев. Скажу лишь что сначала сделать нужно


print_r($FREQ);
print_r($ELEM);

дальше смотрим смещение открывающего тега ITEM open и потом смотрим смещение ИНТЕРЕСУЮЩИХ нас тегов относительно него.. нас к приеру интересует тег ТИТЛЕ а он смещен на 1 позицию.. вот и приписали ( просото у меня пример такой получился что на 1 позицию)

[$A+1]

Данный снизу скрипт выдат пять свежих постов из ленты. Обрежет количество символов поста до 70 штук. Это позволит вставить токие автонаполняемые новости к примеру в новостной блок, вашего сайта или блога.
Это дополнение дописал хороший человек =!DaRKsLAVE!=.
Пользуйтсь на здоровье -) .

$linkName = ( «читать..» );

$N = count($FREQ[‘ITEM’]);
for($i=0; $i

сентября 13, 2008 — 12:36

Я пользуюсь

Я пользуюсь модулем для Drupal Leech, все делает сам. :)

Все о парсинге RSS лент средствами PHP

Вот только сегодня закончил писать скрипт парсера RSS лент для одного постоянного заказчика и решил поделиться способами и возможностями который нам предлагает язык PHP для этого дела (парсинга RSS). Для начала давайте я скажу о том что такое вообще RSS, вдруг кто-то из вас еще не знает. Сочинять сам не буду, а просто процитирую википедию:

RSS — семейство XML-форматов, предназначенных для описания лент новостей, анонсов статей, изменений в блогах и т. п. Информация из различных источников, представленная в формате RSS, может быть собрана, обработана и представлена пользователю в удобном для него виде специальными программами-агрегаторами.

То есть это по сути XML (кто незнает что это идем в википедию и читаем), а XML как нам известно хорошо структурированный документ. Я клоню к тому что если в RSS есть открывающий тег, то должен быть и закрывающий (например: Заголовок ), иначе это не RSS. Думаю на данном этапе суть ясна: нам нужно получить информацию заключенную между тегами. Любая RSS лента имеет заголовок заключенный между тегами и сам текст статьи заключенный между тегами , именно их нам и нужно спарсить.

Теперь расскажу о способах написания RSS парсера и что предлагает нам PHP для реализации.

Способ 1 – SimpleXML

SimpleXML – это расширение для PHP5 устанавливаемое в него по умолчанию, представляет самый простой и элегантный способ обработки XML (соответственно и RSS) файлов. Это и наиболее предпочтительный способ, но он стал доступным только в 5 версии PHP. Тут нет ничего проще, данный код наглядно показывает как просто парсить RSS ленты средствами SimpleXML:


Данный код выведет заголовки и тексты статей из RSS ленты. Просто ведь? Этим SimpleXML и привлекает. Дальше вам нужно будет только правильно распорядиться полученными данными, записать в базу или еще куда-нибудь.
Способ 2 – XML Parser Functions

XML Parser Functions — это стандартные функции PHP для работы с XML доступные начиная c 4-ой версии PHP. Тоже нет ничего сложного, правда в отличие от SimpleXML совсем не элегантно. Продемонстрирую пример:

Вот таким образом мы получаем интересующие нас содержимое элементов RSS. Но тут уже нужно разобраться с массивами которые создает XML разборщик.
Способ 3 – Написать RSS парсер самому

Например я делал именно так, когда не знал про существование SimpleXML и XML Parser Functions. Приведу небольшой пример парсинга RSS обычным процедурным PHP кодом, тут за парсинг отвечает функция preg_match_all(), которая выполняет глобальный поиск шаблона в строке. Данный пример не совершенен и парсит только титлы и дескрипшены у RSS:

Таким же способом можно и отпарсить остальные элементы RSS ленты, главное написать правильно регулярку.

На этих трех способах мы и остановимся, еще есть наверняка множество сторонних скриптов и классов в PHP для парсинга XML, например magpieRSS у которого проблемы с кодировкой при парсинге и решить ее у меня не получилось, да собственно не очень то и хотелось, когда есть SimpleXML и XML Parser Functions. Вот кстати о проблемах с кодировкой мы сейчас и поговорим…
Проблемы с кодировкой

RSS ленты как правило находятся в кодировке UTF-8, при парсинге русского текста тремя способами описанными выше, нам на экран выводятся кракозябры. Все потому, что тест к нам приходит в кодировке UTF-8. Для того что бы вывести нормальные РУССКИЕ буквы нужно перекодировать спарсеный текст из кодировки UTF-8 в Windows-1251. Для этих целей в PHP существует функция iconv(), но она доступна не на всех серверах и чтобы избежать дальнейших проблем с вашим RSS парсером советую использовать самописную функцию перекодировки. Вникать в тонкости кодировок и разбираться как из одной кодировки получается другая думаю вам не хочется, так же не хотелось и мне. Немного погуглив я нашел замечательную функцию перекодировки из UTF-8 в Windows-1251 и обратно, предоставляет ее некий товарищ E64F. Возможно конечно он тоже ее где-то слямзил, но это не так важно, важно то что она мне очень понравилась по сравнению с другими нагуглеными функциями. Выкладываю функцию и пример ее использования:

Функция utf8_convert() принимает 2 параметра: $str – наша строка которую нужно перекодировать и $type – в какую кодировку нужно кодировать (“w” – из utf в win, “u” – из win в utf). Как это применить к нашим 3-м способам парсинга RSS думаю разберетесь, если хоть немного знаете PHP.

Вот на этом пожалуй и закончим. Удачного парсинга !

RSS — парсер

Многие сайты имеют rss ленты для рассылки новостей. Rss парсер – Content Downloader позволит вам загрузить нужную информацию прямо из рсс лент.

Почти все парсеры rss загружают только содержимое лент (часто это обрезанные анонсы новостей), чего не всегда достаточно. С помощью программы Content Downloader можно парсить полные новости, ссылки которых находятся в rss ленте.

Так как новостные ленты структурированы, и вся информация заключена между определенными повторяющимися тегами (например, loc), мы без труда сможем собрать ссылки на новости с помощью нашего парсера rss. После чего сразу же можно будет приступить к загрузке новостей по этим ссылкам.

Посмотрев следующее видео, вы более наглядно ознакомитесь с работой rss парсера:

На видео показан этап получения ссылок на посты. Далее мы можем приступить к загрузке самих постов, настроив вывод в удобный для нас формат.

Илон Маск рекомендует:  Что такое код ldap_error

Парсер rss имеет функцию автоматического определения текста статьи в загружаемом документе. Это очень удобно при загрузке новостей из нескольких источников одновременно, так как при автоматическом поиске текста статьи не нужно задавать диапазоны парсинга.

Если у вас есть какие-либо вопросы, касающиеся работы программы, вы можете обращаться к нам по ICQ 571-880-051.

(оценок: 3, средний балл: 2.33)

Бесплатный парсер контента — AftParser

Достаточно мощный универсальный парсер для WordPress. Позволяет собирать контент с одного или нескольких источников и обрабатывать его, подгоняя под требуемый формат используя все возможности языка PHP. Присутствует возможность отложенного парсинга. Лучший бесплатный парсер для wordpress на этот момент — AftParser всегда к вашим услугам!

Скачать — AftParser

Краткое описание функционала:

Парсер состоит из 4х страниц: Главной страницы, Страницы парсера ссылок, Страницы парсера RSS лент и страницы настроек. Вот как все это будет выглядеть после установки:

Внимание: Как настроить AftParser можно прочитать тут.

Начнем с главной страницы. На ней отображается список парсеров, запущенных в данный момент.

На каждой странице в блоках указаны пояснения. Вся документация поставляется из коробки, достаточно внимательно почитать, чтобы все стало ясно.

Парсер сайтов:

Страница парсера сайтов позволяет парсить данные как с одного, так и с нескольких источников. Необходимо лишь указать ссылки на материалы.

Что? Лень копаться по сети и в ручную собирать материалы? Не отчаивайтесь — все автоматизировано.

Есть два инструмента, которые позволяют наполнять список ссылок в автоматичском режиме.

Парсер карты сайта — позволяет собрать ссылки из файла sitemap или с любой html страницы.

Граббер ссылок — своеобразная эмуляция поисковой системы. Робот будет сам ходить по страницам переданного в него сайта и собирать с них все внутренние ссылки.


Естественно, список ссылок, наполненный автоматическими алгоритмами будет сильно засорен ненужными данными. И тут вам на помощ приходят фильтры.

Простой фильтр ссылок — самый что ни на есть простой и быстрый способ фильтрации. Вы вбиваете условия и фильтр сам выполняет обработку.

Продвинутый фильтр ссылок — фильтр ссылок, позволяющий менять их содержимое и делать еще кучу самых разных вещей. Только для опытных пользователей. Советую выучить php, перед тем, как там то-либо делать.

Если вы выполнили сбор ссылок, то следующим шагом будет — добавление границ контента.

С помощью этих границ парсер будет определять участки, которые необходимо обрабатывать.

Далее следует составление макроса. Это основная фишка моего плагина — вы сами можете уникализировать статью используя все возможности одного из мощнейших языков программирования — php.

Подсветка синтаксиса реализована средствами javascript редактора ACE. Вся документация и все доступные функции приводятся на странице плагина. Список очень внушителен и привести его тут я не могу, так как этот материал и так получается очень длинным. Просто установите плагин и прочитайте, вы будете впечатлены, я гарантирую это.

Примерно так-же выглядит и страница парсера rss лент, с той лишь разницей, что там не требуется приводить списки ссылок.

В плагин встроена эмуляция cron’а, которая будет работать даже если на вашей системе отсутствует сам cron.

А теперь немного технической информации.

Плагин состоит из 24 файлов(не считая картинки), включает в себя 4 очень мощных класса, 12 обработчиков ajax и кучу кода. Весь код сопровождается развернутыми комментариями и хорошо оформлен. Хотя, чтобы успеть к Новому Году, мне пришлось немного накосячить. Но что поделаешь, дедморозлайн не ждет. Количество строк кода даже приводить не буду, оно, скорее всего, переваливает за 40 тысяч. Взгляните на этот проект, открытый в notepad++ Пустого места же не осталось, а ведь это еще не все файлы.

Дизайн страниц плагина — стандартен. Он не бросается в глаза и не раздражает. Все элементы находятся на своих местах и все замечательно работает.

Записки программиста

Парсинг RSS/Atom лент на Python или сам себе RSS2Email

Хочу поделиться с вами небольшим скриптом. Как правило, такого рода поделкам на Python я не посвящаю целые посты, а просто дописываю их в список примеров к заметке Как я выбирал скриптовый язык и остановился на Python (кстати, да, там есть обновления). Но этот конкретный скрипт показался мне достаточно интересным, чтобы рассказать о нем отдельно. Как вы уже поняли, он парсит RSS- и Atom-ленты, а затем отправляет информацию о новых записях на указанный e-mail адрес.

Потребность в таком скрипте возникла после того, как я решил отписаться от большинства неинтересных мне фидов, а оставшиеся пару десятков читать через e-mail. Разумеется, для отправки новых записей из RSS на электронную почту уже существует множество готовых сервисов (например, Blogtrottr). Но новые записи они часто высылают с задержкой и/или с прикрепленной рекламой и/или за деньги, да и вообще завязываться на очередной SaaS из-за такой ерунды не хотелось. Вы ведь еще помните историю с Google Reader, верно? Так вот, в итоге получилось действительно удобнее, чем использовать отдельное приложение для чтения RSS (я пользовался Liferea, а до этого — Feedly). Как минимум, теперь у меня меньше нужных мне приложений, а значит в iPhone’е меньше иконок, а в Unity появился лишний свободный хоткей. Да и просто удобно, когда любые интересующие тебя события приходят в одно-единственное место.

Итак, писать, само собой разумеется, будем не все с нуля, а возьмем готовый модуль feedparser (модуль на PyPI, документация):

# feed2email.py
# (c) Aleksander Alekseev 2020
# http://eax.me/

from smtplib import SMTP
# from smtplib import SMTP_SSL as SMTP
from email . mime . text import MIMEText
from contextlib import contextmanager
import signal
import getpass
import hashlib
import time
import sys
import re

server = ‘smtp.yandex.ru’
port = 587 # 25
login = «YOUR_LOGIN»
from_addr = «NEWS »
receiver = «YOUR_EMAIL»
processed_urls_fname = «processed-urls.txt»
feed_list_fname = «feed-list.txt»
# change to True before first run or you will receive A LOT of emails
# then change back to False
fake_send = False
sleep_time = 60 * 5 # seconds
net_timeout = 10 # seconds
smtp_retry_time = 30 # seconds
smtp_retries_num = 5

# >>> import hashlib
# >>> hashlib.sha1(b»qwerty»).hexdigest()
# ‘b1b3773a05c0ed0176787a4f1574ff0075f7521e’
pwhash = ‘b1b3773a05c0ed0176787a4f1574ff0075f7521e’

class TimeoutException ( Exception ) : pass

@ contextmanager
def timeout_sec ( seconds ) :
def signal_handler ( signum , frame ) :
raise TimeoutException ( Exception ( «Timed out!» ) )
signal . signal ( signal . SIGALRM , signal_handler )
signal . alarm ( seconds )
try :
yield
finally :
signal . alarm ( 0 )

def file_to_list ( fname ) :
rslt = [ ]
with open ( fname , «r» ) as f:
rslt = [ x for x in f. read ( ) . split ( » \n » ) if x. strip ( ) != «» ]
return rslt

password = getpass . getpass ( «SMTP Password: » )

if hashlib. sha1 ( bytearray ( password , ‘utf-8’ ) ) . hexdigest ( ) != pwhash:
print ( «Invalid password» , file = sys . stderr )
sys . exit ( 1 )

while True :
feed_list = file_to_list ( feed_list_fname )
# filter comments
feed_list = [ x for x in feed_list if not re . match ( «(?i) \s *#» , x ) ]
keep_urls = 100 * len ( feed_list )
processed_urls = [ ]

try :
processed_urls = file_to_list ( processed_urls_fname )
except FileNotFoundError:
pass

print ( «Processing <> feeds. » . format ( len ( feed_list ) ) )

for feed in feed_list:
print ( feed )
f = None
try :
with timeout_sec ( net_timeout ) :
f = feedparser. parse ( feed )
except TimeoutException:
print ( «ERROR: Timeout!» )
continue

feed_title = f [ ‘feed’ ] . get ( ‘title’ , ‘(NO TITLE)’ )
feed_link = f [ ‘feed’ ] . get ( ‘link’ , ‘(NO LINK)’ )

for entry in f [ ‘entries’ ] :
if entry [ ‘link’ ] in processed_urls:
continue


subject = » | <feed_title>(<feed_link>)» . format ( <br />title = entry. get ( ‘title’ , ‘(NO TITLE’ ) , <br />feed_title = feed_title , <br />feed_link = feed_link <br />) <br />print ( subject ) <br />summary = entry. get ( ‘summary’ , ‘(NO SUMMARY)’ ) <br />body = » </p> <summary>\n \n <link>\n \n Source feed: <feed>» . format ( <br />summary = summary [ : 256 ] , <br />link = entry [ ‘link’ ] , <br />feed = feed <br />) <br />print ( body ) <br />print ( «——-» ) <p>msg = MIMEText ( body , ‘plain’ ) <br />msg [ ‘Subject’ ] = subject <br />msg [ ‘From’ ] = from_addr <br />msg [ ‘To’ ] = receiver</p> <p>if not fake_send: <br />for attempt in range ( 1 , smtp_retries_num+ 1 ) : <br />try : <br />with timeout_sec ( net_timeout ) , SMTP ( server , port ) as conn: <br />conn. starttls ( ) <br />conn. login ( login , password ) <br />conn. sendmail ( from_addr , [ receiver ] , msg. as_string ( ) ) <br />break <br />except Exception as exc: <br />print ( ( «Failed to send email <>/<> — <>, » + <br />«retrying in <> seconds» ) . format ( <br />attempt , smtp_retries_num , exc , <br />smtp_retry_time <br />) <br />) <br />time . sleep ( smtp_retry_time )</p> <p>processed_urls = [ entry [ ‘link’ ] ] + processed_urls</p> <p>with open ( processed_urls_fname , «w» ) as urls_file: <br />urls_file. write ( » \n » . join ( processed_urls [ :keep_urls ] ) )</p> <p>print ( «Sleeping <> seconds. » . format ( sleep_time ) ) <br />time . sleep ( sleep_time )</p> <p>Список фидов можно получить из OPML-файла при помощи примерно такого однострочника:</p> <p>Теперь правим немного настройки, запускаем на каком-нибудь сервере в screen и радуемся. Все равно у любого уважающего себя программиста в наше время уже есть сервер в DigitalOcean под VPN, Syncthing, закрытые Git-репозитории и другие подобного рода вещи, верно? Нечего ему простаивать без дела.</p> <p>Пара интересных свойств приведенного скрипта:</p> <ul> <li>Если в несколько фидов приходит новость с одним URL (такое бывает, если подписаться на агрегатор фидов и некоторые блоги из этого агрегатора), вы получите уведомление о новости только один раз;</li> <li>На время отпуска скрипт можно остановить, а вернувшись из отпуска один раз прогнать его с fake_send = True — и не придется разгребать все пропущенные новости;</li> <li>Все данные хранятся в текстовых файлах, которые так удобно редактировать Vim’ом и бэкапить Git’ом, притом в списке фидов можно использовать комментарии;</li> </ul> <p>А чем вы в это время суток читаете RSS?</p> <p><em>Дополнение:</em> Если вас заинтересовала тема отправки писем по SMTP, обратите также внимание на пост Пример сбора почты по протоколу IMAP на Python.</p> <h2 id="best-way-to-parse-rss-atom-feeds-with-php">Best way to parse RSS/Atom feeds with PHP [closed]</h2> <p>I’m currently using Magpie RSS but it sometimes falls over when the RSS or Atom feed isn’t well formed. Are there any other options for parsing RSS and Atom feeds with PHP?</p> <div style="clear:both; margin-top:0em; margin-bottom:1em;"><a href="https://studiowb.ru/chto-takoe-kod-destroymenu/" target="_blank" class="u2e649f18d1dec273564c937de275856e"><!-- INLINE RELATED POSTS 2/3 //--><style> .u2e649f18d1dec273564c937de275856e { padding:0px; margin: 0; padding-top:1em!important; padding-bottom:1em!important; width:100%; display: block; font-weight:bold; background-color:#eaeaea; border:0!important; border-left:4px solid inherit!important; text-decoration:none; } .u2e649f18d1dec273564c937de275856e:active, .u2e649f18d1dec273564c937de275856e:hover { opacity: 1; transition: opacity 250ms; webkit-transition: opacity 250ms; text-decoration:none; } .u2e649f18d1dec273564c937de275856e { transition: background-color 250ms; webkit-transition: background-color 250ms; opacity: 1; transition: opacity 250ms; webkit-transition: opacity 250ms; } .u2e649f18d1dec273564c937de275856e .ctaText { font-weight:bold; color:#C0392B; text-decoration:none; font-size: 16px; } .u2e649f18d1dec273564c937de275856e .postTitle { color:#2C3E50; text-decoration: underline!important; font-size: 16px; } .u2e649f18d1dec273564c937de275856e:hover .postTitle { text-decoration: underline!important; } </style><div style="padding-left:1em; padding-right:1em;"><span class="ctaText">Илон Маск рекомендует:</span>  <span class="postTitle">Что такое код destroymenu</span></div></a></div><h2 id="closed-as-off-topic-by-alexis-king-maks3w"><b>closed</b> as off-topic by Alexis King, Maks3w, MrTux, CRABOLO, greg-449 Feb 8 ’15 at 8:20</h2> <p>This question appears to be off-topic. The users who voted to close gave this specific reason: </p> <ul> <li>«Questions asking us to <b>recommend or find a book, tool, software library, tutorial or other off-site resource</b> are off-topic for Stack Overflow as they tend to attract opinionated answers and spam. Instead, describe the problem and what has been done so far to solve it.» – Alexis King, Maks3w, MrTux, CRABOLO, greg-449</li> </ul> <p> If this question can be reworded to fit the rules in the help center, please edit the question.</p> <h2 id="10-answers-10">10 Answers 10</h2> <p>Your other options include:</p> <p>I’ve always used the SimpleXML functions built in to PHP to parse XML documents. It’s one of the few generic parsers out there that has an intuitive structure to it, which makes it extremely easy to build a meaningful class for something specific like an RSS feed. Additionally, it will detect XML warnings and errors, and upon finding any you could simply run the source through something like HTML Tidy (as ceejayoz mentioned) to clean it up and attempt it again.</p> <p>Consider this very rough, simple class using SimpleXML:</p> <h2 id="xparser-parser-rss-lent">[xParser] Парсер RSS лент</h2> <p>Парсер контента RSS лент, с возможностью скачивания медиа-контента на сайт.</p> <p>При добавлении полей ленты, которые надо парсить, вместо названия поля (title или enclosure[url]) можно указать @INLINE чанк, который будет обработан <b>Fenom</b>. Благодаря этому, в этих полях можно выстраивать совершенно любую логику, вплоть до создания новых разделов «на ходу». </p> <h3 id="podrobnee-o-rabote">Подробнее о работе</h3> <p>Стояла задача, как можно больше упростить взаимодействие с компонентом, поэтому жду мнений, насколько компонент прост в управлении.</p> <h4 id="dobavlyaem-zadanie">Добавляем задание</h4> <p>Заходим на страницу компонента, жмём <u>Добавить задание</u> => <u>Добавить RSS-ленту</u>. <br />На вкладке <b>Основное</b> заполняем примерно так: </p> <p>Переключаемся на вкладку <b>Конфигурация</b>, где можно указать: </p> <ul> <li>Шаблон для создаваемых ресурсов,</li> <li>Контекст,</li> <li>Родительский контейнер в пределах выбранного контекста,</li> <li>Сконфигурировать скачивание медиа-контента,</li> <li>При необходимости поменять базовый тег ленты и базовый тег записи.</li> </ul> <p><i>Расширения медиа-контента и папки для сохранения каждого из расширений указываются в JSON.</i></p> <p>Жмём <b>Сохранить</b> — задание добавлено!</p> <p><center><iframe width="420" height="315" src="https://www.youtube.com/embed/MP5aeuw32WI" frameborder="0" allowfullscreen></iframe><br /> </center></p> <h4 id="dobavlyaem-polya-dlya-parsinga">Добавляем поля для парсинга</h4> <p>На только что добавленном задании нажимаем правой кнопкой и выбираем <b>Поля задания</b>: </p> <p>Откроется список полей задания, который пока пуст.</p> <p>Помимо добавления полей задания мы можем просмотреть <b>Массив значений ленты</b> — это распечатанный массив с данным из первой записи ленты: </p> <p>Запоминаем названия полей, которые нам надо парсить на сайт и кликаем <b>Добавить поле</b>. Откроется окошко с возможностью указать:</p> <ol> <li><b>Системное поле</b>. Выпадающий список системных полей ресурса и ТВ-полей. </li> <li><b>Поле в источнике</b>. Текстовое поле, в которое нужно ввести наименование тега в RSS-ленте. <br />Можно указать @INLINE чанк, который будет обработан <b>Fenom</b> из <b>pdoTools</b>. В чанке содержатся плейсхолдеры всех возможных полей из RSS-ленты, которые имеются в записи между тегами <b>item</b>, а также массив с настройками задания <b>$_task</b>. <br />За счёт внедрения в данное поле <b>Fenom</b>, можно будет, получая значение из тега <b>category</b> (как например в RSS Lenta.ru) делать выборку по базе ресурсов, в поисках ID аналогичной категории на нашем сайте, а если не найдено — добавлять. <br />Тег <b>enclosure</b> и ему подобные, указываются либо через чанк: «@INLINE <$enclosure['url']>», либо в виде CSS селектора: «enclosure[url]». <br />Если не указано или значение по данному полю в ленте пустое, то в качестве значения для <b>Системное поле</b> будет взято значение из следующего поля — <b>Значение по-умолчанию</b>. </li> <li><b>Значение по-умолчанию</b>. В данном поле можно указать значение, которое будет записано в <b>Системное поле</b>. Например, если мы в <b>Системное поле</b> выбрали <b>class_key</b>, то, чтобы создавались Тикеты, мы в поле <b>Значение по-умолчанию</b> пишем «Ticket», а <b>Поле в источнике</b> оставляем пустым. <br />Такую же «магию» можно сделать и с полем <b>published</b>, указав в значении по-умолчанию цифру «1». Тогда ресурс на сайт будет добавляться сразу опубликованным.</li> </ol> <p>Помимо основых полей с данными, которые необходимо выгрузить на сайт, нам надо ещё добавить поле, по которому пакет будет понимать, что данная запись уже есть на сайте. Для этого <b>добавляем новое поле</b>, значение <b>Системное поле</b> оставляем пустым, а в <b>Поле в источнике</b> пишем, например, «guid» (потому что он менее всего подвержен изменениям). Должно быть как-то так: </p> <p>Сохраняем. В списке полей на этом поле ставим указатель <b>Уникальное поле</b> (кнопка со звездой слева): </p> <p>Всё готово к парсингу, как к единоразовому, так и к ежеминутному (у компонента есть скрипт для запуска заданий из крона).</p> <p><b>Спасибо Владимиру за спонсорскую поддержку!</b></p> <h2 id="kak-vstroit-rss-lentu-v-svoe-andro-esli-vy">Как встроить RSS ленту в свое Andro > Если Вы читаете эту статью, то Вы вероятно знаете, что такое RSS и зачем оно используется. Если нет, посмотритездесь. С точки зрения программиста RSS лента представляет собой XML файл, который можно легко разобрать, используя<b>XML parser</b>. В распоряжении Android программиста находится довольно обширный набор библиотек для работы с XML<br /></h2> <ul> <li>javax.xml.parsers.SAXParser</li> <li>andro >Мы остановимся на первом варианте.<b>SAXParser</b>часто используется при разработке Android приложений, поскольку он входит в состав Android SDK. В рамках этого небольшого урока мы создадим простое Android приложение и используем SAXParser для разбора и отображения ленты. </ul> <h2 id="sozdaem-andro-sozdadim-prostoe-prilozhenie">Создаем Andro >Создадим простое приложение, которое будет получать RSS ленту. Для программирования будем использовать Eclipse IDE.<br /></h2> <p><ol> Выберите File->New->Project и в открывшемся диалоговом окне выбираем Andro >Обратите внимание, созданный нами класс RSSFeed, наследующий Activity фактически представляет собой визуальный пользовательский интерфейс — окно. Сейчас наш проект состоит из трех файлов:<b>RSSFeed.java</b> cодержит исходный код класса RSSFeed, файл разметки<b>res/layout/main.xml</b>, содержащий информацию о дизайне пользовательского интерфейса и Android UI компонентах; файл манифеста <b>AndroidManifest.xml</b>, в котором хранится основные параметры проекта (название пакета, запускаемая при старте программы деятельность (Activity класс), компоненты приложения, процессы, разрешения, минимально необходимый уровень API).</p> </ol> <p>Давайте для начала настроим интерфейс нашего будущего приложения. Щелкнете два раза в дереве проекта по файлу<i>res/layout/main.xml</i>. В центральной части Eclipse откроется визуальный редактор. В моем случае на окне уже имеется компонент LinearLayout, у которого задана вертикальная ориентация. Под окном редактирования присутствует вкладка maix.xml, позволяющая переключиться от визуального редактора к редактору xml файла.</p> <p>Мы хотим отображать ленту RSS как текстовое сообщение, поэтому нам понадобится разместить на экране элемент TextView, где мы будем отображать заголовок ленты. В поле android:text мы видим значение «@string/hello». Это ссылка на переменную hello, прописанную в файле res\values\strings.xml. щелкнем по этому файлу и для элемента с именем hello введем значение «Наша RSS лента». Вернемся в main.xml и добавим еще один элемент TextView для отображение собственно ленты. Зададим параметр id «rss», как показано ниже</p> <h2 id="nastroyka-androidmanifest-xml">Настройка AndroidManifest.xml</h2> <p>Мы будем получать RSS ленту с удаленного сервера, поэтому наше приложение должно иметь соответствующие разрешения. Щелкнем в дереве проектов по файлу<i>AndroidManifest.xml</i>, перейдем на вкладку Permissions, нажмем на кнопку Add, выберем Uses Permission, нажмем ОК. В поле Name введем<i>android.permission.INTERNET</i>. В результате этих действий в файле AndroidManifest.xml появится строка</p> <p>После этого наше приложение может работать с сокетами и получать информацию из сети. Файл AndroidManifest.xml должен иметь вид:</p> <h2 id="parsing-rss-lenty-v-android">Парсинг RSS ленты в Android</h2> <p>Вся подготовительная работа сделана, настало время заняться тем, ради чего писалась данная статья — парсингом RSS ленты. Нам понадобится импортировать следующие классы:</p> <ul> <li>javax.xml.parsers.SAXParser</li> <li>javax.xml.parsers.SAXParserFactory</li> <li>org.xml.sax.InputSource</li> <li>org.xml.sax.XMLReader</li> <li>org.xml.sax.helpers.DefaultHandler</li> </ul> <p>Вернемся в файл <i>src\android.rss\RSSFeed.java</i> и добавим в начало файла строки:</p> <p>Внутри класса RSSFeed определим строковую переменную, куда будем загружать RSS ленту, перед заголовком метода onCreate.</p> <p>Метод onCreate запускается при старте нашей программы. Сейчас этот метод содержит две строки, приводящие к отображению нашего окна на экране. Добавим в конец этого метода переменную rss, связанную со вторым элементом TextView. С помощью этой переменной мы будем отображать информацию на экране.</p> <p>Метод findViewBy , который мы задали у второго TextView, когда создавали дизайн).</p> <p>Загрузим из интернет RSS ленту, для этого воспользуемся классом URL, в конструкторе которого укажем адрес файла с лентой, напримерhttp://feeds2.feedburner.com/Mobilab (Да, у нас есть RSS лента, с помощью которой можно следить за новыми материалами на сайте). В процессе чтения может произойти ошибка ввода/вывода, поэтому Java требует помещать такие потенциально опасные команды в блок try/catch.</p> <p>Для того, чтобы программа заработала, нужно подключить еще парочку библиотек:</p> <p>Файл RSS ленты представляет собой XML, содержащий совокупность элементов . Каждый в свою очередь содержит внутри элементы title, description, link, creator, date, названия которых говорят сами за себя.</p> <h2 id="sozdaem-obekt-xml-parsera">Создаем объект XML парсера</h2> <p>Пользуясь статическим методом newInstance создадим объект<b>SAXParserFactory</b></p> <p>Создадим объект SAXParser с помощью newSAXParser:</p> <p><center><iframe width="420" height="315" src="https://www.youtube.com/embed/xiK-DH74oJg" frameborder="0" allowfullscreen></iframe><br /> </center></p> <p>Получим объект XMLReader от SAXParser с помощью метода getXMLReader:</p> <p>Создание этих объектов требует размещение их в блоке try/catch и отработки исключительных ситуаций SAXException, ParserConfigurationException. Также нам понадобится подключить еще несколько библиотек</p> <h2 id="obrabotka-sobytiy-sax2">Обработка событий SAX2</h2> <p>Работа с SAXParser построена на обработке событий. При разборе XML файла SAX2 генерирует события, например, при начале и завершении следующего элемента или блока символьных данных. Для обработки событий нужно создать специальный класс-потомок DefaultHandler. Назовем его RSSHandler. Именно внутри этого класса будет происходить парсиг XML файла. Нам нужно переопределить методы startElement и characters, отвечающие за начало нового элемента и считывание блока данных. Название элемента передается в startElement через параметр localName. Если мы встретили элемент , мы должны добавить значение localName в строку результатов.</p> <p>В методе characters будем добавлять символьные данные в строку rssResult. Метод replaceAll будем использовать для удаления всех двойных пробелов.</p> <p>Код класса приведен ниже</p> <p>Да, нужно подключить библиотеку org.xml.sax.Attributes;</p> <p>Вернемся к методу onCreate. Создадим объект RSSHandler и передадим его объекту XMLReader с помощью метода setContentHandler. Тем самым мы говорим XMLReader-у, что будем использовать методы RSSHandler при парсинге файла.</p> <p>В данный момент мы установили связь с удаленной страницей с помощью объекта URL, для считывания потока данных требуется создать объект InputSource и открыть поток данных для чтения с помощью метода openStream():</p> <p>Созданный таким образом объект мы передаем XMLReader для разбора данных</p> <p>После этой команды происходит считывание и парсинг файла файла RSS ленты, в процессе которого внутри методов класса RSSHandler заполняется данными строка rssResult. Все что нам осталось, передать текст из этой строки в элемент TextView на экране.</p> <p>Вот, собственно и все. Мы считали удаленный файл, провели его разбор, в процессе которого сформировали строку rssResult, а затем отобразили эту строку на экране с помощью TextView.</p> <h2 id="magpierss-rss-for-php">MagpieRSS: RSS for PHP</h2> <h2 id="magpierss-provides-an-xml-based-expat-rss">MagpieRSS provides an XML-based (expat) RSS parser in PHP.</h2> <ul> <li>Excited to announce that AOE media, a TYPO3 & Open Source provider from Germany has recently agreed to provide continues sponsoring for MagpieRSS.</li> <li>Magpie links page has been rebuilt, and is now driven by del.icio.us</li> <li>The Magpie Blog has been revived and is the place for Magpie news and howtos.</li> <li>Atom support is no longer alpha <ul> <li>Download MagpieRSS 0.61</li> </ul> </li> <li>Magpie 0.6a (alpha) now available <ul> <li>Adds experimental parsing support for Atom</li> </ul> </li> <li>Two new sources of MagpieRSS information: <ul> <li>MagpieRSS links is a partial list of all the cool stuff people have done with Magpie.</li> </ul> </li> <li>MagpieRSS 0.52 Now Compatible with PHP 4.3.2 <ul> <li>Improved socket handling in HTTP library</li> <li>Thanks go to Scott, and Phil for bug reports, and especially to Steve for amazing debugging work.</li> </ul> </li> <li>MagpieRSS 0.51 Released <ul> <li>important bugfix, please upgrade</li> <li>fixes silent failure when PHP is built without zlib support</li> </ul> </li> <li>Feed On Feeds Uses Magpie <ul> <li>server based PHP RSS aggregator built with MagpieRSS</li> <li>easy to install, easy to use.</li> </ul> </li> <li>MagpieRSS 0.5 Released <ul> <li>supports transparent HTTP gzip content negotiation for reduced bandwidth usage</li> <li>quashed some undefined index notices</li> </ul> <h3 id="features">Features</h3> <p><center><iframe width="420" height="315" src="https://www.youtube.com/embed/HQKa1-oSmfc" frameborder="0" allowfullscreen></iframe><br /> </center></p> <h4 id="easy-to-use">Easy to Use</h4> <h4 id="parses-rss-0-9-rss-1-0">Parses RSS 0.9 — RSS 1.0</h4> <h4 id="integrated-object-cache">Integrated Object Cache</h4> <h4 id="http-conditional-gets">HTTP Conditional GETs</h4> <h4 id="configurable">Configurable</h4> <h4 id="modular">Modular</h4> <ul> <li>rss_fetch.inc — wraps a simple interface ( fetch_rss() ) around the library.</li> <li>rss_parse.inc — provides the RSS parser, and the RSS object</li> <li>rss_cache.inc — a simple (no GC) object cache, optimized for RSS objects</li> <li>rss_utils.inc — utility functions for working with RSS. currently provides parse_w3cdtf() , for parsing W3CDTF into epoch seconds.</li> </ul> </li> <li> <ul> <li>Secure — supports HTTP authentication, and SSL</li> <li>Bandwidth friendly — supports transparent GZIP encoding to reduce bandwidth usage</li> <li>Does not use fopen() , work even if <em>allow_url_fopen</em> is disabled.</li> </ul> </li> </ul> <h3 id="magpie-s-approach-to-parsing-rss">Magpie’s approach to parsing RSS</h3> <p>This makes it very simple support the varied versions of RSS simply, but forces the consumer of a RSS feed to be cognizant of how it is structured.(at least if you want to do something fancy)</p> <p>Magpie parses a RSS feed into a simple object, with 4 fields: channel , items , image , and textinput .</p> <h4 id="channel">channel</h4> <h4 id="items">items</h4> <p>Is parsed, and pushed on the $rss->items array as:</p> <h4 id="image-and-textinput">image and textinput</h4> <h3 id="usage-examples">Usage Examples:</h3> <h3 id="todos">Todos</h3> <h4 id="rss-parser-2">RSS Parser</h4> <ul> <center><iframe width="420" height="315" src="https://www.youtube.com/embed/19NSla4FNdQ" frameborder="0" allowfullscreen></iframe><br /> </center> <li>Swap in a smarter parser that includes optional support for validation, and required fields.</li> <li>Improve RSS 2.0 support, in all its wacky permutations (as much as I’m annoyed by it)</li> <li>Improve support for modules that rely on attributes</li> </ul> <h4 id="rss-cache">RSS Cache</h4> <ul> <li>Light-weight garbage collection</li> </ul> <h4 id="fetch-rss">Fetch RSS</h4> <ul> <li>Attempt to auto-detect an RSS feed, given a URL following, much like rssfinder.pydoes.</li> </ul> <ul> <li>More examples</li> <li>A test suite</li> <li>RSS generation, perhaps with RSSwriter?</li> </ul> <h3 id="getting-help-with-magpie">Getting Help With Magpie</h3> <ul> <li>Read the Frequently Asked Questions</li> <li>Read How to Get Help with MagpieRSS</li> <li>Read over the How To section on the links page, to see if an existing solutions work for you.</li> <li>Read over the mailing list archives</li> <li>Subscribe to magpierss-general and ask your question.</li> </ul> <h3 id="rss-resources">RSS Resources</h3> <ul> <li>RSS Tutorial for Content Publishers and Webmasters is a great place to start.</li> <li>RSS Workshop: Publish and Syndicate Your News to the Web is also a good introduction</li> <li>Finding More Channels on how to find RSS feeds.</li> <li>The Mapgie FAQ and Links pages can be very useful.</li> <li>RSS-DEV mailing list is generally a very helpful, informative space, with the occasional heated debate</li> <p><center><iframe width="420" height="315" src="https://www.youtube.com/embed/PTXnmMlipmo" frameborder="0" allowfullscreen></iframe><br /> </center> </p> <li>RSS Validator</li> </ul> <h3 id="license-and-contact-info">License and Contact Info</h3> <p>Magpie is distributed under the GPL license.</p> <p>coded by: kellan (at) protest.net, feedback is always appreciated.</p> <p>Development sponsored in part by AOE media, a TYPO3 & Open Source provider from Germany.</p> <h2 id="ke-blog">Ке?блог</h2> <h2 id="blog-o-interesnom">Блог о интересном</h2> <h2 id="vse-o-parsinge-rss-lent-sredstvami-php-2">Все о парсинге RSS лент средствами PHP</h2> <p><strong>RSS</strong> — семейство XML-форматов, предназначенных для</p> <p>описания лент новостей, анонсов статей, изменений в блогах и т. п.</p> <p>Информация из различных источников, представленная в формате RSS, может</p> <p>быть собрана, обработана и представлена</p> <p>пользователю в удобном для него</p> <p>виде специальными программами-агрегаторами.</p> <p>То есть это по сути XML (кто незнает что это идем в википедию и читаем),</p> <p>а XML как нам известно хорошо структурированный документ. Я клоню к</p> <p>тому что если в RSS есть открывающий тег, то должен быть и закрывающий</p> <p>(например: Заголовок ), иначе это не RSS.</p> <p>Думаю на данном этапе суть ясна: нам нужно получить информацию</p> <p>заключенную между тегами. Любая RSS лента имеет заголовок заключенный</p> <p>между тегами и сам текст статьи заключенный</p> <p>между тегами , именно их нам и</p> <p>Теперь расскажу о способах написания RSS парсера и что предлагает нам PHP для реализации.</p> <h4 id="sposob-1-simplexml">Способ 1 – SimpleXML</h4> <p><strong>SimpleXML</strong> – это расширение для PHP5 устанавливаемое</p> <p>в него по умолчанию, представляет самый простой и элегантный способ</p> <p>обработки XML (соответственно и RSS) файлов. Это и наиболее</p> <p>предпочтительный способ, но он стал доступным только в 5 версии PHP.</p> <p>Тут нет ничего проще, данный код наглядно показывает как просто парсить</p> <p>RSS ленты средствами SimpleXML:</p> <p>Данный код выведет заголовки и тексты статей из RSS ленты. Просто</p> <p>ведь? Этим SimpleXML и привлекает. Дальше вам нужно будет только</p> <p>правильно распорядиться полученными данными, записать в базу или еще</p> <h4 id="sposob-2-xml-parser-functions">Способ 2 – XML Parser Functions</h4> <p><strong>XML Parser Functions</strong> — это стандартные функции PHP</p> <p>для работы с XML доступные начиная c 4-ой версии PHP. Тоже нет ничего</p> <p>сложного, правда в отличие от SimpleXML совсем не элегантно.</p> <p>Вот таким образом мы получаем интересующие нас содержимое элементов</p> <p>RSS. Но тут уже нужно разобраться с массивами которые создает XML</p> <h4 id="sposob-3-napisat-rss-parser-samomu">Способ 3 – Написать RSS парсер самому</h4> <p>Например я делал именно так, когда не знал про существование</p> <p>SimpleXML и XML Parser Functions. Приведу небольшой пример парсинга RSS</p> <p>обычным процедурным PHP кодом, тут за парсинг отвечает функция</p> <p>preg_match_all(), которая выполняет глобальный поиск шаблона в строке.</p> <p>Данный пример не совершенен и парсит только титлы и дескрипшены у RSS:</p> <p>Таким же способом можно и отпарсить остальные элементы RSS ленты, главное написать правильно регулярку.</p> <p>На этих трех способах мы и остановимся, еще есть наверняка множество</p> <p>сторонних скриптов и классов в PHP для парсинга XML, например magpieRSS</p> <p>у которого проблемы с кодировкой при парсинге и решить ее у меня не</p> <p>получилось, да собственно не очень то и хотелось, когда есть SimpleXML</p> <p>и XML Parser Functions. Вот кстати о проблемах с кодировкой мы сейчас и</p> <h4 id="problemy-s-kodirovkoy">Проблемы с кодировкой</h4> <p>RSS ленты как правило находятся в кодировке UTF-8, при парсинге</p> <p>русского текста тремя способами описанными выше, нам на экран выводятся</p> <p>кракозябры. Все потому, что тест к нам приходит в кодировке UTF-8. Для</p> <p>того что бы вывести нормальные РУССКИЕ буквы нужно перекодировать</p> <p>спарсеный текст из кодировки UTF-8 в Windows-1251. Для этих целей в PHP</p> <p>существует функция iconv(),</p> <p>но она доступна не на всех серверах и чтобы избежать дальнейших проблем</p> <p>с вашим RSS парсером советую использовать самописную функцию</p> <p>перекодировки. Вникать в тонкости кодировок и разбираться как из одной</p> <p>кодировки получается другая думаю вам не хочется, так же не хотелось и</p> <p>мне. Немного погуглив я нашел замечательную функцию перекодировки из UTF-8 в Windows-1251 и обратно,</p> <p>предоставляет ее некий товарищ E64F. Возможно конечно он тоже ее где-то</p> <p>слямзил, но это не так важно, важно то что она мне очень понравилась по</p> <p>сравнению с другими нагуглеными функциями. Выкладываю функцию и пример</p> <p>Функция utf8_convert() принимает 2 параметра: $str – наша строка</p> <p>которую нужно перекодировать и $type – в какую кодировку нужно</p> <p>кодировать (“w” – из utf в win, “u” – из win в utf). Как это применить</p> <p>к нашим 3-м способам парсинга RSS думаю разберетесь, если хоть немного</p><div style="clear:both; margin-top:0em; margin-bottom:1em;"><a href="https://studiowb.ru/chto-takoe-kod-ltrim/" target="_blank" class="ud6b21ce5848a9f8ec634e6fb2ebe1f5c"><!-- INLINE RELATED POSTS 3/3 //--><style> .ud6b21ce5848a9f8ec634e6fb2ebe1f5c { padding:0px; margin: 0; padding-top:1em!important; padding-bottom:1em!important; width:100%; display: block; font-weight:bold; background-color:#eaeaea; border:0!important; border-left:4px solid inherit!important; text-decoration:none; } .ud6b21ce5848a9f8ec634e6fb2ebe1f5c:active, .ud6b21ce5848a9f8ec634e6fb2ebe1f5c:hover { opacity: 1; transition: opacity 250ms; webkit-transition: opacity 250ms; text-decoration:none; } .ud6b21ce5848a9f8ec634e6fb2ebe1f5c { transition: background-color 250ms; webkit-transition: background-color 250ms; opacity: 1; transition: opacity 250ms; webkit-transition: opacity 250ms; } .ud6b21ce5848a9f8ec634e6fb2ebe1f5c .ctaText { font-weight:bold; color:#C0392B; text-decoration:none; font-size: 16px; } .ud6b21ce5848a9f8ec634e6fb2ebe1f5c .postTitle { color:#2C3E50; text-decoration: underline!important; font-size: 16px; } .ud6b21ce5848a9f8ec634e6fb2ebe1f5c:hover .postTitle { text-decoration: underline!important; } </style><div style="padding-left:1em; padding-right:1em;"><span class="ctaText">Илон Маск рекомендует:</span>  <span class="postTitle">Что такое код ltrim</span></div></a></div> </div><!-- .entry-content --> </article><!-- #post-## --> <div class="entry-footer"> </div> <div class="b-share b-share--post"> <div class="b-share__title">Понравилась статья? Поделиться с друзьями:</div> <span class="b-share__ico b-share__vk js-share-link" data-uri="https://vk.com/share.php?url=https%3A%2F%2Fstudiowb.ru%2Frss-parser%2F"></span> <span class="b-share__ico b-share__fb js-share-link" data-uri="https://www.facebook.com/sharer.php?u=https%3A%2F%2Fstudiowb.ru%2Frss-parser%2F"></span> <span class="b-share__ico b-share__tw js-share-link" data-uri="https://twitter.com/share?text=RSS+%26%238212%3B+%D0%BF%D0%B0%D1%80%D1%81%D0%B5%D1%80&url=https%3A%2F%2Fstudiowb.ru%2Frss-parser%2F"></span> <span class="b-share__ico b-share__ok js-share-link" data-uri="https://connect.ok.ru/dk?st.cmd=WidgetSharePreview&service=odnoklassniki&st.shareUrl=https%3A%2F%2Fstudiowb.ru%2Frss-parser%2F"></span> <span class="b-share__ico b-share__gp js-share-link" data-uri="https://plus.google.com/share?url=https%3A%2F%2Fstudiowb.ru%2Frss-parser%2F"></span> <span class="b-share__ico b-share__whatsapp js-share-link js-share-link-no-window" data-uri="whatsapp://send?text=RSS+%26%238212%3B+%D0%BF%D0%B0%D1%80%D1%81%D0%B5%D1%80%20https%3A%2F%2Fstudiowb.ru%2Frss-parser%2F"></span> <span class="b-share__ico b-share__viber js-share-link js-share-link-no-window" data-uri="viber://forward?text=RSS+%26%238212%3B+%D0%BF%D0%B0%D1%80%D1%81%D0%B5%D1%80%20https%3A%2F%2Fstudiowb.ru%2Frss-parser%2F"></span> <span class="b-share__ico b-share__telegram js-share-link js-share-link-no-window" data-uri="https://telegram.me/share/url?url=https%3A%2F%2Fstudiowb.ru%2Frss-parser%2F&text=RSS+%26%238212%3B+%D0%BF%D0%B0%D1%80%D1%81%D0%B5%D1%80"></span> </div> <div class="b-related"> <div class="b-related__header"><span>Вам также может быть интересно</span></div> <div class="b-related__items"> <div id="post-11791" class="post-card post-11791 post type-post status-publish format-standard has-post-thumbnail category-obuchenie-programmirovaniu"> <div class="post-card__image"> <a href="https://studiowb.ru/jeffekty-s-izobrazhenijami/"> <img width="275" height="140" src="https://studiowb.ru/wp-content/uploads/2019/11/images-2-275x140.jpg" class="attachment-thumb-wide size-thumb-wide wp-post-image" alt="" /> <div class="entry-meta"> <span class="entry-category"><span>Обучение программированию</span></span> <span class="entry-meta__info"> </span> </div><!-- .entry-meta --> </a> </div> <header class="entry-header"> <div class="entry-title"><a href="https://studiowb.ru/jeffekty-s-izobrazhenijami/" rel="bookmark" >Эффекты с изображениями</a></div> </header><!-- .entry-header --> <div class="post-card__content"> Как сделать — визуальные эффекты изображениям Узнайте, как добавить визуальные эффекты к изображениям. Фильтры </div><!-- .entry-content --> </div><!-- #post-## --> <div id="post-11807" class="post-card post-11807 post type-post status-publish format-standard has-post-thumbnail category-obuchenie-programmirovaniu"> <div class="post-card__image"> <a href="https://studiowb.ru/jazyk-xml-shemy-dannyh/"> <img width="330" height="140" src="https://studiowb.ru/wp-content/uploads/2019/11/IT-Tools-for-Development-330x140.jpg" class="attachment-thumb-wide size-thumb-wide wp-post-image" alt="" /> <div class="entry-meta"> <span class="entry-category"><span>Обучение программированию</span></span> <span class="entry-meta__info"> </span> </div><!-- .entry-meta --> </a> </div> <header class="entry-header"> <div class="entry-title"><a href="https://studiowb.ru/jazyk-xml-shemy-dannyh/" rel="bookmark" >Язык xml схемы данных</a></div> </header><!-- .entry-header --> <div class="post-card__content"> Понимание XML Узнайте, как Расширяемый язык разметки (Extensible Markup Language — XML) облегчает универсальный </div><!-- .entry-content --> </div><!-- #post-## --> <div id="post-11792" class="post-card post-11792 post type-post status-publish format-standard has-post-thumbnail category-obuchenie-programmirovaniu"> <div class="post-card__image"> <a href="https://studiowb.ru/jumor-pivo-dlja-programmista/"> <img width="330" height="140" src="https://studiowb.ru/wp-content/uploads/2019/11/5-Top-Technology-Trends-In-2019-And-The-Opportunities-They-Will-Create-1030x672-330x140.jpg" class="attachment-thumb-wide size-thumb-wide wp-post-image" alt="" srcset="https://studiowb.ru/wp-content/uploads/2019/11/5-Top-Technology-Trends-In-2019-And-The-Opportunities-They-Will-Create-1030x672-330x140.jpg 330w, https://studiowb.ru/wp-content/uploads/2019/11/5-Top-Technology-Trends-In-2019-And-The-Opportunities-They-Will-Create-1030x672-770x330.jpg 770w" sizes="(max-width: 330px) 100vw, 330px" /> <div class="entry-meta"> <span class="entry-category"><span>Обучение программированию</span></span> <span class="entry-meta__info"> </span> </div><!-- .entry-meta --> </a> </div> <header class="entry-header"> <div class="entry-title"><a href="https://studiowb.ru/jumor-pivo-dlja-programmista/" rel="bookmark" >Юмор пиво для программиста</a></div> </header><!-- .entry-header --> <div class="post-card__content"> ХАЙФХАК: ПРОГРАММИСТ ВЗЛОМАЛ СИСТЕМУ, ЧТОБЫ ПОПИТЬ ПИВО БЕСПЛАТНО / пиво :: geek новости :: </div><!-- .entry-content --> </div><!-- #post-## --> <div id="post-11808" class="post-card post-11808 post type-post status-publish format-standard has-post-thumbnail category-obuchenie-programmirovaniu"> <div class="post-card__image"> <a href="https://studiowb.ru/jazyk-obrabotki-dannyh-awk/"> <img width="330" height="140" src="https://studiowb.ru/wp-content/uploads/2019/11/cloud_lines-330x140.jpg" class="attachment-thumb-wide size-thumb-wide wp-post-image" alt="" /> <div class="entry-meta"> <span class="entry-category"><span>Обучение программированию</span></span> <span class="entry-meta__info"> </span> </div><!-- .entry-meta --> </a> </div> <header class="entry-header"> <div class="entry-title"><a href="https://studiowb.ru/jazyk-obrabotki-dannyh-awk/" rel="bookmark" >Язык обработки данных awk</a></div> </header><!-- .entry-header --> <div class="post-card__content"> Примеры команды AWK в Linux Введение AWK назван в честь фамилии его авторов: Альфред </div><!-- .entry-content --> </div><!-- #post-## --> <div id="post-11793" class="post-card post-11793 post type-post status-publish format-standard has-post-thumbnail category-obuchenie-programmirovaniu"> <div class="post-card__image"> <a href="https://studiowb.ru/ja-zagruzhaju-timagelist-dinamicheski-kak-sdelat/"> <img width="330" height="140" src="https://studiowb.ru/wp-content/uploads/2019/11/Info-tech-banner-1024x305-330x140.jpg" class="attachment-thumb-wide size-thumb-wide wp-post-image" alt="" /> <div class="entry-meta"> <span class="entry-category"><span>Обучение программированию</span></span> <span class="entry-meta__info"> </span> </div><!-- .entry-meta --> </a> </div> <header class="entry-header"> <div class="entry-title"><a href="https://studiowb.ru/ja-zagruzhaju-timagelist-dinamicheski-kak-sdelat/" rel="bookmark" >Я загружаю timagelist динамически как сделать картинки из timagelist прозрачными</a></div> </header><!-- .entry-header --> <div class="post-card__content"> Я загружаю timagelist динамически как сделать картинки из timagelist прозрачными? Элемент управления ImageList содержит </div><!-- .entry-content --> </div><!-- #post-## --> <div id="post-11809" class="post-card post-11809 post type-post status-publish format-standard has-post-thumbnail category-obuchenie-programmirovaniu"> <div class="post-card__image"> <a href="https://studiowb.ru/jazyk-preobrazovanij-xsl-xslt/"> <img width="330" height="140" src="https://studiowb.ru/wp-content/uploads/2019/11/SoCIT-IT-330x140.jpg" class="attachment-thumb-wide size-thumb-wide wp-post-image" alt="" /> <div class="entry-meta"> <span class="entry-category"><span>Обучение программированию</span></span> <span class="entry-meta__info"> </span> </div><!-- .entry-meta --> </a> </div> <header class="entry-header"> <div class="entry-title"><a href="https://studiowb.ru/jazyk-preobrazovanij-xsl-xslt/" rel="bookmark" >Язык преобразований xsl (xslt)</a></div> </header><!-- .entry-header --> <div class="post-card__content"> Введение в XSLT XSLT представляет собой способ для XML-документов в другие XML или документы </div><!-- .entry-content --> </div><!-- #post-## --> <div id="post-11794" class="post-card post-11794 post type-post status-publish format-standard has-post-thumbnail category-obuchenie-programmirovaniu"> <div class="post-card__image"> <a href="https://studiowb.ru/javljaetsja-li-ukazannaja-stranica-domashnej-ie/"> <img width="330" height="140" src="https://studiowb.ru/wp-content/uploads/2019/11/it-mindset-or-technology-1080x627-330x140.jpg" class="attachment-thumb-wide size-thumb-wide wp-post-image" alt="" srcset="https://studiowb.ru/wp-content/uploads/2019/11/it-mindset-or-technology-1080x627-330x140.jpg 330w, https://studiowb.ru/wp-content/uploads/2019/11/it-mindset-or-technology-1080x627-770x330.jpg 770w" sizes="(max-width: 330px) 100vw, 330px" /> <div class="entry-meta"> <span class="entry-category"><span>Обучение программированию</span></span> <span class="entry-meta__info"> </span> </div><!-- .entry-meta --> </a> </div> <header class="entry-header"> <div class="entry-title"><a href="https://studiowb.ru/javljaetsja-li-ukazannaja-stranica-domashnej-ie/" rel="bookmark" >Является ли указанная страница — домашней (IE)</a></div> </header><!-- .entry-header --> <div class="post-card__content"> Является ли указанная страница — домашней? (IE) При создании новой вкладки (about:Tabs) в IE9 </div><!-- .entry-content --> </div><!-- #post-## --> <div id="post-11810" class="post-card post-11810 post type-post status-publish format-standard has-post-thumbnail category-obuchenie-programmirovaniu"> <div class="post-card__image"> <a href="https://studiowb.ru/jazyk-preobrazovanij-xslt/"> <img width="57" height="57" src="https://studiowb.ru/wp-content/uploads/2019/11/images2.png" class="attachment-thumb-wide size-thumb-wide wp-post-image" alt="" /> <div class="entry-meta"> <span class="entry-category"><span>Обучение программированию</span></span> <span class="entry-meta__info"> </span> </div><!-- .entry-meta --> </a> </div> <header class="entry-header"> <div class="entry-title"><a href="https://studiowb.ru/jazyk-preobrazovanij-xslt/" rel="bookmark" >Язык преобразований XSLT</a></div> </header><!-- .entry-header --> <div class="post-card__content"> Справочник по интерфейсу администратора Ссылки Назад «> Вверх Вперед Опубликованные SQL View > XSLT </div><!-- .entry-content --> </div><!-- #post-## --> <div id="post-11795" class="post-card post-11795 post type-post status-publish format-standard has-post-thumbnail category-obuchenie-programmirovaniu"> <div class="post-card__image"> <a href="https://studiowb.ru/jadro-i-processy/"> <img width="330" height="140" src="https://studiowb.ru/wp-content/uploads/2019/11/SoCIT-IT-330x140.jpg" class="attachment-thumb-wide size-thumb-wide wp-post-image" alt="" /> <div class="entry-meta"> <span class="entry-category"><span>Обучение программированию</span></span> <span class="entry-meta__info"> </span> </div><!-- .entry-meta --> </a> </div> <header class="entry-header"> <div class="entry-title"><a href="https://studiowb.ru/jadro-i-processy/" rel="bookmark" >Ядро и процессы</a></div> </header><!-- .entry-header --> <div class="post-card__content"> Что такое ядро в биологии? Строение и функции ядра В каждой живой клетке протекает </div><!-- .entry-content --> </div><!-- #post-## --> <div id="post-11811" class="post-card post-11811 post type-post status-publish format-standard has-post-thumbnail category-obuchenie-programmirovaniu"> <div class="post-card__image"> <a href="https://studiowb.ru/jazyk-programmirovanija-alfa/"> <img width="330" height="140" src="https://studiowb.ru/wp-content/uploads/2019/11/Info-tech-banner-1024x305-330x140.jpg" class="attachment-thumb-wide size-thumb-wide wp-post-image" alt="" /> <div class="entry-meta"> <span class="entry-category"><span>Обучение программированию</span></span> <span class="entry-meta__info"> </span> </div><!-- .entry-meta --> </a> </div> <header class="entry-header"> <div class="entry-title"><a href="https://studiowb.ru/jazyk-programmirovanija-alfa/" rel="bookmark" >Язык программирования alfa</a></div> </header><!-- .entry-header --> <div class="post-card__content"> Язык программирования alfa По питанию контроллеры делятся на два типа: с питанием 220 В </div><!-- .entry-content --> </div><!-- #post-## --> <div id="post-11796" class="post-card post-11796 post type-post status-publish format-standard has-post-thumbnail category-obuchenie-programmirovaniu"> <div class="post-card__image"> <a href="https://studiowb.ru/jazyk-cc/"> <img width="330" height="140" src="https://studiowb.ru/wp-content/uploads/2019/11/it-development-500x500-330x140.jpg" class="attachment-thumb-wide size-thumb-wide wp-post-image" alt="" /> <div class="entry-meta"> <span class="entry-category"><span>Обучение программированию</span></span> <span class="entry-meta__info"> </span> </div><!-- .entry-meta --> </a> </div> <header class="entry-header"> <div class="entry-title"><a href="https://studiowb.ru/jazyk-cc/" rel="bookmark" >Язык cc</a></div> </header><!-- .entry-header --> <div class="post-card__content"> C++ — Базовый синтаксис Когда мы рассматриваем программу на C ++, ее можно определить </div><!-- .entry-content --> </div><!-- #post-## --> <div id="post-11812" class="post-card post-11812 post type-post status-publish format-standard has-post-thumbnail category-obuchenie-programmirovaniu"> <div class="post-card__image"> <a href="https://studiowb.ru/jazyk-refal/"> <img width="330" height="140" src="https://studiowb.ru/wp-content/uploads/2019/11/it-330x140.jpg" class="attachment-thumb-wide size-thumb-wide wp-post-image" alt="" srcset="https://studiowb.ru/wp-content/uploads/2019/11/it-330x140.jpg 330w, https://studiowb.ru/wp-content/uploads/2019/11/it-770x330.jpg 770w" sizes="(max-width: 330px) 100vw, 330px" /> <div class="entry-meta"> <span class="entry-category"><span>Обучение программированию</span></span> <span class="entry-meta__info"> </span> </div><!-- .entry-meta --> </a> </div> <header class="entry-header"> <div class="entry-title"><a href="https://studiowb.ru/jazyk-refal/" rel="bookmark" >Язык рефал</a></div> </header><!-- .entry-header --> <div class="post-card__content"> Язык рефал Ура! Сегодня, 30.05.2005, наконец появилась адаптированная к современным платформам Windows-(95/98/ME/NT/2000/XP) и UNIX </div><!-- .entry-content --> </div><!-- #post-## --> <div id="post-11781" class="post-card post-11781 post type-post status-publish format-standard has-post-thumbnail category-obuchenie-programmirovaniu"> <div class="post-card__image"> <a href="https://studiowb.ru/jeffekt-pazvivajushhegosja-flaga/"> <img width="330" height="140" src="https://studiowb.ru/wp-content/uploads/2019/11/Technology-Innovation-330x140.jpg" class="attachment-thumb-wide size-thumb-wide wp-post-image" alt="" /> <div class="entry-meta"> <span class="entry-category"><span>Обучение программированию</span></span> <span class="entry-meta__info"> </span> </div><!-- .entry-meta --> </a> </div> <header class="entry-header"> <div class="entry-title"><a href="https://studiowb.ru/jeffekt-pazvivajushhegosja-flaga/" rel="bookmark" >Эффект pазвивающегося флага</a></div> </header><!-- .entry-header --> <div class="post-card__content"> Scrontch’s Flag Designer Design Your Flag! Generates Scalable Vector Graphics (SVG). This App requires </div><!-- .entry-content --> </div><!-- #post-## --> <div id="post-11797" class="post-card post-11797 post type-post status-publish format-standard has-post-thumbnail category-obuchenie-programmirovaniu"> <div class="post-card__image"> <a href="https://studiowb.ru/jazyk-sql/"> <img width="330" height="140" src="https://studiowb.ru/wp-content/uploads/2019/11/information-technology-learning-330x140.png" class="attachment-thumb-wide size-thumb-wide wp-post-image" alt="" /> <div class="entry-meta"> <span class="entry-category"><span>Обучение программированию</span></span> <span class="entry-meta__info"> </span> </div><!-- .entry-meta --> </a> </div> <header class="entry-header"> <div class="entry-title"><a href="https://studiowb.ru/jazyk-sql/" rel="bookmark" >Язык sql</a></div> </header><!-- .entry-header --> <div class="post-card__content"> SQL-Урок 1. Язык SQL. Основные понятия. Для того, чтобы начать изучать SQL нам нужно </div><!-- .entry-content --> </div><!-- #post-## --> <div id="post-11813" class="post-card post-11813 post type-post status-publish format-standard has-post-thumbnail category-obuchenie-programmirovaniu"> <div class="post-card__image"> <a href="https://studiowb.ru/jazyk-s/"> <img width="330" height="140" src="https://studiowb.ru/wp-content/uploads/2019/11/Accredited-Professional-Translation-Service-for-IT-Industry-Singapore-330x140.jpg" class="attachment-thumb-wide size-thumb-wide wp-post-image" alt="" /> <div class="entry-meta"> <span class="entry-category"><span>Обучение программированию</span></span> <span class="entry-meta__info"> </span> </div><!-- .entry-meta --> </a> </div> <header class="entry-header"> <div class="entry-title"><a href="https://studiowb.ru/jazyk-s/" rel="bookmark" >Язык с</a></div> </header><!-- .entry-header --> <div class="post-card__content"> C++ с нуля Этот самоучитель создан для тех, кто хочет освоить основы программирования на </div><!-- .entry-content --> </div><!-- #post-## --> <div id="post-11782" class="post-card post-11782 post type-post status-publish format-standard has-post-thumbnail category-obuchenie-programmirovaniu"> <div class="post-card__image"> <a href="https://studiowb.ru/jeffekt-gorjashhej-nadpisi/"> <img width="330" height="140" src="https://studiowb.ru/wp-content/uploads/2019/11/corporate-e1483006320338-330x140.png" class="attachment-thumb-wide size-thumb-wide wp-post-image" alt="" /> <div class="entry-meta"> <span class="entry-category"><span>Обучение программированию</span></span> <span class="entry-meta__info"> </span> </div><!-- .entry-meta --> </a> </div> <header class="entry-header"> <div class="entry-title"><a href="https://studiowb.ru/jeffekt-gorjashhej-nadpisi/" rel="bookmark" >Эффект горящей надписи</a></div> </header><!-- .entry-header --> <div class="post-card__content"> Простой огненный текст в Фотошопе Конечный результат: Ресурсы урока: Шаг 1 Создайте новый документ </div><!-- .entry-content --> </div><!-- #post-## --> <div id="post-11798" class="post-card post-11798 post type-post status-publish format-standard has-post-thumbnail category-obuchenie-programmirovaniu"> <div class="post-card__image"> <a href="https://studiowb.ru/jazyk-xml-documents-type-definitions-dtd/"> <img width="330" height="140" src="https://studiowb.ru/wp-content/uploads/2019/11/homepage-image-1-330x140.png" class="attachment-thumb-wide size-thumb-wide wp-post-image" alt="" /> <div class="entry-meta"> <span class="entry-category"><span>Обучение программированию</span></span> <span class="entry-meta__info"> </span> </div><!-- .entry-meta --> </a> </div> <header class="entry-header"> <div class="entry-title"><a href="https://studiowb.ru/jazyk-xml-documents-type-definitions-dtd/" rel="bookmark" >Язык xml documents type definitions (dtd)</a></div> </header><!-- .entry-header --> <div class="post-card__content"> Язык XML — практическое введение . Documents Type Definitions (DTD) В XML- документах DTD </div><!-- .entry-content --> </div><!-- #post-## --> <div id="post-11814" class="post-card post-11814 post type-post status-publish format-standard has-post-thumbnail category-obuchenie-programmirovaniu"> <div class="post-card__image"> <a href="https://studiowb.ru/jazyki-i-grammatiki-prostejshij-kompiljator/"> <img width="278" height="140" src="https://studiowb.ru/wp-content/uploads/2019/11/images-3-278x140.jpg" class="attachment-thumb-wide size-thumb-wide wp-post-image" alt="" /> <div class="entry-meta"> <span class="entry-category"><span>Обучение программированию</span></span> <span class="entry-meta__info"> </span> </div><!-- .entry-meta --> </a> </div> <header class="entry-header"> <div class="entry-title"><a href="https://studiowb.ru/jazyki-i-grammatiki-prostejshij-kompiljator/" rel="bookmark" >Языки и грамматики простейший компилятор</a></div> </header><!-- .entry-header --> <div class="post-card__content"> ГРАММАТИКА ЯЗЫКОВ ПРОГРАММИРОВАНИЯ Описанию грамматики языка предшествует описание его алфавита. Алфавит любого языка состоит </div><!-- .entry-content --> </div><!-- #post-## --> <div id="post-11783" class="post-card post-11783 post type-post status-publish format-standard has-post-thumbnail category-obuchenie-programmirovaniu"> <div class="post-card__image"> <a href="https://studiowb.ru/jeffekt-ledjanoj-nadpisi/"> <img width="330" height="140" src="https://studiowb.ru/wp-content/uploads/2019/11/G10269-EC-330x140.jpg" class="attachment-thumb-wide size-thumb-wide wp-post-image" alt="" srcset="https://studiowb.ru/wp-content/uploads/2019/11/G10269-EC-330x140.jpg 330w, https://studiowb.ru/wp-content/uploads/2019/11/G10269-EC-770x330.jpg 770w" sizes="(max-width: 330px) 100vw, 330px" /> <div class="entry-meta"> <span class="entry-category"><span>Обучение программированию</span></span> <span class="entry-meta__info"> </span> </div><!-- .entry-meta --> </a> </div> <header class="entry-header"> <div class="entry-title"><a href="https://studiowb.ru/jeffekt-ledjanoj-nadpisi/" rel="bookmark" >Эффект ледяной надписи</a></div> </header><!-- .entry-header --> <div class="post-card__content"> Ледяной текст в Фотошопе Конечный результат: Ресурсы урока: 1. Создание фона Шаг 1 Создайте </div><!-- .entry-content --> </div><!-- #post-## --> <div id="post-11799" class="post-card post-11799 post type-post status-publish format-standard has-post-thumbnail category-obuchenie-programmirovaniu"> <div class="post-card__image"> <a href="https://studiowb.ru/jazyk-xml-dom-sovmestimye-analizatory/"> <img width="308" height="140" src="https://studiowb.ru/wp-content/uploads/2019/11/images-308x140.jpg" class="attachment-thumb-wide size-thumb-wide wp-post-image" alt="" /> <div class="entry-meta"> <span class="entry-category"><span>Обучение программированию</span></span> <span class="entry-meta__info"> </span> </div><!-- .entry-meta --> </a> </div> <header class="entry-header"> <div class="entry-title"><a href="https://studiowb.ru/jazyk-xml-dom-sovmestimye-analizatory/" rel="bookmark" >Язык xml dom совместимые анализаторы</a></div> </header><!-- .entry-header --> <div class="post-card__content"> XML-анализаторы в java XML как набор байт в памяти, запись в базе или текстовый </div><!-- .entry-content --> </div><!-- #post-## --> <div id="post-11815" class="post-card post-11815 post type-post status-publish format-standard has-post-thumbnail category-obuchenie-programmirovaniu"> <div class="post-card__image"> <a href="https://studiowb.ru/jazyki-opisanija-polzovatelskih-interfejsov/"> <img width="330" height="140" src="https://studiowb.ru/wp-content/uploads/2019/11/AI-is-coming-—-and-HR-is-not-prepared-8b38574-330x140.jpg" class="attachment-thumb-wide size-thumb-wide wp-post-image" alt="" /> <div class="entry-meta"> <span class="entry-category"><span>Обучение программированию</span></span> <span class="entry-meta__info"> </span> </div><!-- .entry-meta --> </a> </div> <header class="entry-header"> <div class="entry-title"><a href="https://studiowb.ru/jazyki-opisanija-polzovatelskih-interfejsov/" rel="bookmark" >Языки описания пользовательских интерфейсов</a></div> </header><!-- .entry-header --> <div class="post-card__content"> Языки описания пользовательских интерфейсов Язык описания интерфейсов Язык описания интерфейсов (IDL), используемый OMG определяет </div><!-- .entry-content --> </div><!-- #post-## --> <div id="post-11784" class="post-card post-11784 post type-post status-publish format-standard has-post-thumbnail category-obuchenie-programmirovaniu"> <div class="post-card__image"> <a href="https://studiowb.ru/jeffekt-linzy-watcom-c/"> <img width="310" height="140" src="https://studiowb.ru/wp-content/uploads/2019/11/images-4-310x140.jpg" class="attachment-thumb-wide size-thumb-wide wp-post-image" alt="" /> <div class="entry-meta"> <span class="entry-category"><span>Обучение программированию</span></span> <span class="entry-meta__info"> </span> </div><!-- .entry-meta --> </a> </div> <header class="entry-header"> <div class="entry-title"><a href="https://studiowb.ru/jeffekt-linzy-watcom-c/" rel="bookmark" >Эффект линзы (watcom c)</a></div> </header><!-- .entry-header --> <div class="post-card__content"> Эффект линзы (watcom c) Просветляющие покрытия от ZEISS Высококачественные линзы требуют высоколассного подхода: защита, </div><!-- .entry-content --> </div><!-- #post-## --> <div id="post-11800" class="post-card post-11800 post type-post status-publish format-standard has-post-thumbnail category-obuchenie-programmirovaniu"> <div class="post-card__image"> <a href="https://studiowb.ru/jazyk-xml-xml-v-microsoft-internet-explorer-5-0/"> <img width="330" height="140" src="https://studiowb.ru/wp-content/uploads/2019/11/5-Top-Technology-Trends-In-2019-And-The-Opportunities-They-Will-Create-1030x672-330x140.jpg" class="attachment-thumb-wide size-thumb-wide wp-post-image" alt="" srcset="https://studiowb.ru/wp-content/uploads/2019/11/5-Top-Technology-Trends-In-2019-And-The-Opportunities-They-Will-Create-1030x672-330x140.jpg 330w, https://studiowb.ru/wp-content/uploads/2019/11/5-Top-Technology-Trends-In-2019-And-The-Opportunities-They-Will-Create-1030x672-770x330.jpg 770w" sizes="(max-width: 330px) 100vw, 330px" /> <div class="entry-meta"> <span class="entry-category"><span>Обучение программированию</span></span> <span class="entry-meta__info"> </span> </div><!-- .entry-meta --> </a> </div> <header class="entry-header"> <div class="entry-title"><a href="https://studiowb.ru/jazyk-xml-xml-v-microsoft-internet-explorer-5-0/" rel="bookmark" >Язык xml xml в microsoft internet explorer 5 0</a></div> </header><!-- .entry-header --> <div class="post-card__content"> Основы XML для начинающих пользователей Введение в правильную разметку XML означает Extensible Markup Language, </div><!-- .entry-content --> </div><!-- #post-## --> <div id="post-11816" class="post-card post-11816 post type-post status-publish format-standard has-post-thumbnail category-obuchenie-programmirovaniu"> <div class="post-card__image"> <a href="https://studiowb.ru/jazyki-programmirovanija/"> <img width="330" height="140" src="https://studiowb.ru/wp-content/uploads/2019/11/IT-Technology-DANIA-330x140.jpg" class="attachment-thumb-wide size-thumb-wide wp-post-image" alt="" srcset="https://studiowb.ru/wp-content/uploads/2019/11/IT-Technology-DANIA-330x140.jpg 330w, https://studiowb.ru/wp-content/uploads/2019/11/IT-Technology-DANIA.jpg 700w" sizes="(max-width: 330px) 100vw, 330px" /> <div class="entry-meta"> <span class="entry-category"><span>Обучение программированию</span></span> <span class="entry-meta__info"> </span> </div><!-- .entry-meta --> </a> </div> <header class="entry-header"> <div class="entry-title"><a href="https://studiowb.ru/jazyki-programmirovanija/" rel="bookmark" >Языки программирования</a></div> </header><!-- .entry-header --> <div class="post-card__content"> Языки программирования Язык программирования — искусственный (формальный) язык, предназначенный для записи программ для исполнителя </div><!-- .entry-content --> </div><!-- #post-## --> </div> </div> <meta itemprop="author" content="Study"> <meta itemprop="datePublished" content="2019-11-13T20:43:02+03:00"/> <meta itemscope itemprop="mainEntityOfPage" itemType="https://schema.org/WebPage" itemid="https://studiowb.ru/rss-parser/" content="RSS — парсер"> <meta itemprop="dateModified" content="2019-11-13"> <meta itemprop="datePublished" content="2019-11-13T20:43:02+03:00"> <div itemprop="publisher" itemscope itemtype="https://schema.org/Organization"><div itemprop="logo" itemscope itemtype="https://schema.org/ImageObject" style="display: none;"><img itemprop="url image" src="https://studiowb.ru/wp-content/uploads/2019/11/images-2.png" alt="Кодинг, CSS и SQL"></div><meta itemprop="name" content="Кодинг, CSS и SQL"><meta itemprop="telephone" content="Кодинг, CSS и SQL"><meta itemprop="address" content="https://studiowb.ru"></div> </main><!-- #main --> </div><!-- #primary --> </div><!-- micro --> <aside id="secondary" class="widget-area" itemscope itemtype="http://schema.org/WPSideBar"> <div id="search-2" class="widget widget_search"> <form role="search" method="get" id="searchform_1951" action="https://studiowb.ru/" class="search-form"> <label class="screen-reader-text" for="s_1951">Поиск: </label> <input type="text" value="" name="s" id="s_1951" class="search-form__text"> <button type="submit" id="searchsubmit_1951" class="search-form__submit"></button> </form></div> </aside><!-- #secondary --> </div><!-- #content --> <footer class="site-footer container" itemscope itemtype="http://schema.org/WPFooter"> <div class="site-footer-inner "> <div class="footer-info"> © 2021 Кодинг, CSS и SQL </div><!-- .site-info --> <div class="footer-counters"> </div> </div><!-- .site-footer-inner --> </footer><!-- .site-footer --> <button type="button" class="scrolltop js-scrolltop"></button> </div><!-- #page --> <script type="text/javascript"> <!-- var _acic={dataProvider:10};(function(){var e=document.createElement("script");e.type="text/javascript";e.async=true;e.src="//www.acint.net/aci.js";var t=document.getElementsByTagName("script")[0];t.parentNode.insertBefore(e,t)})() //--> </script><script type='text/javascript'> /* <![CDATA[ */ var lang_array = {"text1":"\u0441\u0440\u0435\u0434\u043d\u0435\u0435","text2":"\u0438\u0437"}; var wps_ajax = {"url":"https:\/\/studiowb.ru\/wp-admin\/admin-ajax.php","nonce":"dfff0dbb53"}; /* ]]> */ </script> <script src='https://studiowb.ru/wp-content/themes/root/js/scripts.min.js?ver=2.3.2'></script> <script src='https://studiowb.ru/wp-includes/js/comment-reply.min.js?ver=5.2.10'></script> <script src='https://studiowb.ru/wp-includes/js/wp-embed.min.js?ver=5.2.10'></script> <!--LiveInternet counter--><script type="text/javascript"> new Image().src = "//counter.yadro.ru/hit?r"+ escape(document.referrer)+((typeof(screen)=="undefined")?"": ";s"+screen.width+"*"+screen.height+"*"+(screen.colorDepth? screen.colorDepth:screen.pixelDepth))+";u"+escape(document.URL)+ ";h"+escape(document.title.substring(0,150))+ ";"+Math.random();</script><!--/LiveInternet--> </body> </html>