Наблюдение за новыми вопросами Mathematica с использованием Mathematica и API StackOverflow

Если Mr.Wizard не находится в отпуске, довольно сложно победить это явление, которое кажется одаренным вездесущим и всеведением. Как мы можем превзойти его с помощью Mathematica и API StackOverflow?

Ответ 1

Здесь вариация на решение Сджерда.

Основное отличие заключается в использовании состыкованной ячейки вместо всплывающего диалогового окна. Ячейка имеет ссылку на новое сообщение, а также кнопку, которая очистит закрепленную ячейку до предыдущего состояния.

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

storedTitle = "";
storedID = 0;
mySOWatchTask = 
  CreateScheduledTask[{lastTitle, 
     lastID} = {"title", 
      "question_id"} /. ("questions" /. 
        Import["http://api.stackoverflow.com/1.1/questions?key=       \
         QEpjCjsXYE6s_kZEkFr4Lw&page=1&pagesize=1&sort=creation&\
tagged=                mathematica", "JSON"])[[1]];
   If[lastID != storedID,
    storedTitle = lastTitle;
    storedID = lastID;
    SetOptions[$FrontEndSession, 
     DockedCells -> 
      Cell[BoxData[
        ToBoxes[Style[
          With[{dock = Options[$FrontEndSession, DockedCells]}, 
           Grid[{{Button[Style["\[CircleTimes]", 16], 
               SetOptions[$FrontEndSession, dock], 
               Appearance -> None], "New StackOverflow question: ", 
              Hyperlink[lastTitle, 
               "http://stackoverflow.com/questions/" <> 
                ToString[lastID]]}}, 
            Alignment -> {{Left, Left, Left}}, 
            ItemSize -> {{2, 14, Scaled[0.7]}}]], 
          FontFamily -> "Times"]]], "DockedCell", 
       Background -> Orange]]; EmitSound[Sound[SoundNote[]]]];, 60];

enter image description here

Ответ 2

Довольно легко на самом деле. Все, что вам нужно, это следующее.

Определите задачу просмотра:

storedTitle = "";

mySOWatchTask =
  CreateScheduledTask[
   {
    lastTitle = 
    "title" /. ("questions" /. 
        Import["http://api.stackoverflow.com/1.1/questions?key=\
                QEpjCjsXYE6s_kZEkFr4Lw&page=1&pagesize=1&sort=creation&tagged=\
                mathematica", "JSON"])[[1]];
    If[lastTitle != storedTitle, 
      storedTitle = lastTitle; 
      EmitSound[Sound[SoundNote[]]]; 
      MessageDialog["New question: " <> lastTitle]
    ];
    },
   60
   ];

И для начала:

StartScheduledTask[mySOWatchTask];

Остановить его:

 StopScheduledTask[mySOWatchTask];

Посмотрите, что работает:

 ScheduledTasks[] // Shallow

Удалить задачу:

 RemoveScheduledTask[mySOWatchTask];

или все задачи:

RemoveScheduledTask[ScheduledTasks[]];

Этот опрос SO каждую минуту (минимум, который не рассматривается как оскорбительный), и отображает диалоговое окно, и звук воспроизводится всякий раз, когда возникает новый вопрос Mathematica.

enter image description here

Красота этого: использует Mathematica 8, и все мы знаем, что у Mr.Wizard нет этого (пока); -)

Обратите внимание на то, что SO API сильно кэшируется, поэтому ответ может возникнуть не напрямую. Я также не тестировал это широко.

ИЗМЕНИТЬ
Обратите внимание, что используемый ключ (app-id) предназначен только для этого небольшого приложения Mathematica. Если вам нужен один для другого приложения, вы можете получить его в быстрой и безболезненной процедуре здесь. Мне потребовалось меньше минуты.