Новое и старое API — полагаю, лучше использовать новое, или есть нюансы?
Как работает получение обновленных тем? Ничего не могу понять в логике.
Есть какие-то требования, чтобы не дергать API слишком часто?
Здравствуйте, User_Ok.
Вы писали:
U_O> Новое и старое API — полагаю, лучше использовать новое, или есть нюансы? U_O> Как работает получение обновленных тем? Ничего не могу понять в логике. U_O> Есть какие-то требования, чтобы не дергать API слишком часто?
API лучше использовать новое.
Получение оборванных тем — элементарно.
Ищешь у себя в базе оборванные темы и передаёшь полученные id в http://www.rsdn.ru/ws/janusAT.asmx?op=GetTopicByMessage
Я, например, считаю тему оборванной, если есть сообщение темы, но нет начального сообщения.
Я имел в виду обновленные, а не оборванные.
А с этой функцией какая-то фигня. Сначала работало, а потом стало выдавать:
System.ServiceModel.ProtocolException: The content type text/html; charset=utf-8 of the response message does not match the content type of the binding (text/xml; charset=utf-8). If using a custom encoder, be sure that the IsContentTypeSupported method is implemented properly. The first 1024 bytes of the response were: '
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<html>
<head>
<title>RSDN</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="shortcut icon" href="/favicon.ico" />
<link rel="search" type="application/opensearchdescription+xml"
href="RsdnSearch.xml" title="RSDN" />
<script type="text/javascript" src='http://ajax.googleapis.com/ajax/libs/jquery/1.2.3/jquery.min.js'></script>
<script type="text/javascript" src="Script/rsdn.v1.js"></script>
<script type="text/javascript">
// this page should never load inside of another frame
if (top.location != self.location)
{
top.location = self.location;
}
SetCookie('sw',screen.width);
var g_ext = null;
window.onload = function()
{
try {
if (window.external.msIsSiteMode()) {
g_ext = window.external;
g_ext.msSiteModeCreateJumpList("Мой RSDN");
Здравствуйте, User_Ok.
Вы писали:
U_O> Я имел в виду обновленные, а не оборванные.
Извини — неправильно прочитал.
В команде http://www.rsdn.ru/ws/janusAT.asmx?op=GetNewData есть поле maxOutput — им ты запрашиваешь количество сообщений, сколько хочешь получить, с последней синхронизации.
Последняя синхронизация "датируется" полем "messageRowVersion". Новое значение получается вместе с новыми постами.
Получение сообщений делается просто: в цикле запрашиваешь GetNewData с указанной порцией, пока тебе приходят новые сообщения. Не забывая передавать постоянно обновляющийся RowVersion.
Если вылазит HTML, то это 99% — ошибка на сайте. Обновляются они там, или ещё что делают.
BC>API лучше использовать новое.
BC>Получение оборванных тем — элементарно. BC>Ищешь у себя в базе оборванные темы и передаёшь полученные id в http://www.rsdn.ru/ws/janusAT.asmx?op=GetTopicByMessage BC>Я, например, считаю тему оборванной, если есть сообщение темы, но нет начального сообщения.
Кстати как ты определяешь что сообщение является первым в топике?
По тому что его поле topicId пусто?
Здравствуйте, akasoft, Вы писали:
A>Здравствуйте, AndrewVK, Вы писали:
AVK>>Нет.
A>Тогда, наверное, mid != 0 and tid == 0 and pid == 0.
A>Или достаточно без pid.
под mid понимается messageId?
А разве оно вообще может быть 0?
Здравствуйте, Demandred.
Вы писали:
D> Здравствуйте, xBlackCat, Вы писали: D> BC>API лучше использовать новое. D> BC>Получение оборванных тем — элементарно. D> BC>Ищешь у себя в базе оборванные темы и передаёшь полученные id в http://www.rsdn.ru/ws/janusAT.asmx?op=GetTopicByMessage D> BC>Я, например, считаю тему оборванной, если есть сообщение темы, но нет начального сообщения. D> Кстати как ты определяешь что сообщение является первым в топике? D> По тому что его поле topicId пусто?