使用Mathematica和StackOverflow API观看新的Mathematica问题

除非Wizard先生在度假,否则很难打败这种无所不在和无所不知的天赋。 我们如何使用Mathematica和StackOverflow API胜过他?


以下是Sjoerd解决方案的变体。

主要区别在于使用停靠的单元而不是弹出对话框。 该单元有一个链接到新帖子,以及一个按钮,将停靠的单元格清除到先前的状态。

另一个区别是使用问题ID而不是标题来确定新帖子。 我知道标题有时会被编辑,所以在这种情况下,这会触发一个新帖子。

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];

在这里输入图像描述


其实很简单。 所有你需要的是以下。

定义一个监视任务:

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问题到达时,就会显示一个对话框并播放声音。

在这里输入图像描述

它的优点是:它使用Mathematica 8,我们都知道Mr.Wizard没有(还);-)

请注意,SO API正在被大量缓存,因此响应可能不会直接进行。 我也没有广泛地测试过。

编辑
请注意,上面使用的密钥(app-id)仅供此小型Mathematica应用程序使用。 如果你需要一个用于不同的应用程序,你可以在这里以快速和无痛的程序自己获得一个。 我花了不到一分钟。

链接地址: http://www.djcxy.com/p/35597.html

上一篇: Watching for new Mathematica questions using Mathematica and the StackOverflow API

下一篇: Visualization of Mathematica in Jupyter notebook or the kind