Следите за новыми вопросами Mathematica с помощью Mathematica и API StackOverflow - PullRequest
11 голосов
/ 28 июня 2011

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

Ответы [ 2 ]

15 голосов
/ 28 июня 2011

Вот вариант решения Sjoerd.

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

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

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

15 голосов
/ 28 июня 2011

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

Определите задачу наблюдения:

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 этого не имеет (пока); -)

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

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

...