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

Sjo*_*ies 11 wolfram-mathematica stackexchange-api

除非韦纳德先生正在度假,否则很难打败这种看似无处不在的无所不在的现象.我们如何使用Mathematica和StackOverflow API超越他?

Sjo*_*ies 15

实际上很容易.您只需要以下内容.

定义监视任务:

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
   ];
Run Code Online (Sandbox Code Playgroud)

并开始这个:

StartScheduledTask[mySOWatchTask];
Run Code Online (Sandbox Code Playgroud)

停止它:

 StopScheduledTask[mySOWatchTask];
Run Code Online (Sandbox Code Playgroud)

看看正在运行的是什么:

 ScheduledTasks[] // Shallow
Run Code Online (Sandbox Code Playgroud)

删除任务:

 RemoveScheduledTask[mySOWatchTask];
Run Code Online (Sandbox Code Playgroud)

或所有任务:

RemoveScheduledTask[ScheduledTasks[]];
Run Code Online (Sandbox Code Playgroud)

这每分钟轮询SO(最小值不被视为滥用),并且只要新的Mathematica问题到达,就会显示一个对话框并播放声音.

在此输入图像描述

它的美妙之处在于:它使用Mathematica 8,我们都知道Mr.Wizard没有那个(还);-)

请注意,SO API正在被大量缓存,因此可能无法直接响应.我还没有对此进行过广泛的测试.

编辑
请注意,上面使用的密钥(app-id)仅供这个小型Mathematica应用程序使用.如果您需要一个不同的应用程序,您可以在这里快速,轻松地完成一个程序.我花了不到一分钟.

  • @Sjoerd如果可以,我会不止一次投票.但是你可以利用这个优势而不仅仅是@Mr.现在你发表了这篇文章,我们再次平等了:)但是说真的,这证实了我在过去的一个讨论中所说的内容:当前SO模型所激发的第一个冲动是一件神器而且反映了它的弱点 - 它不会在适当的程度上鼓励合作. (4认同)
  • @Leonid万一你不知道,"西方最快的枪"问题已被广泛讨论.例如,请参阅http://meta.stackoverflow.com/search?q=fastest+gun+in+the+west (3认同)

Bre*_*ion 15

这是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];
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 我认为停靠的单元格未得到充分利用,可能是因为创建单元格需要付出一些努力.我安装了几个Mathematica副本,通常至少有两个打开,并使用自定义停靠单元格告诉我哪个笔记本连接到哪个版本.因此,对我来说,有一种方法可以回到正常的停靠细胞. (2认同)