niconico myvideo search

投稿動画から作者のMyvideoを探す

  1. // ==UserScript==
  2. // @name niconico myvideo search
  3. // @namespace http://web.zgo.jp/
  4. // @description 投稿動画から作者のMyvideoを探す
  5. // @include http://www.nicovideo.jp/watch/*
  6. // @version 0.0.1.20140518104259
  7. // ==/UserScript==
  8. (function() {
  9. var videoTitle = document.getElementsByClassName('video_title')[0];
  10. if (!videoTitle) return;
  11. var videoUserId = unsafeWindow.so.variables.videoUserId;// 投稿者のID
  12. var userVideoURL = "http://www.nicovideo.jp/user/" + videoUserId + "/video";
  13. window.gm_nicoUserId = videoUserId;
  14. // get→inssert
  15. getUserVideo(userVideoURL, insertLink);
  16.  
  17. // ユーザー投稿動画一覧が公開されているか
  18. // 公開されているならcallbackを実行
  19. function getUserVideo(userVideoURL, callback) {
  20. GM_xmlhttpRequest({
  21. method: 'GET',
  22. url: userVideoURL,
  23. headers: {
  24. 'User-agent': 'Mozilla/4.0 (compatible) Greasemonkey'
  25. },
  26. onload: function(responseDetails) {
  27. var DOMHTML = createDocumentFromString(responseDetails.responseText);
  28. if (isOpendVideo(DOMHTML)) {
  29. callback();
  30. return true;
  31. } else {
  32. return false;
  33. }
  34. },
  35. onerror :function() {
  36. GM_log("通信エラー myvideo")
  37. }
  38. });
  39.  
  40. }
  41.  
  42. // class="noList" をみて公開か判定
  43. // 公開ならtrue,非公開ならfalse
  44. function isOpendVideo(doc) {
  45. var cntBody = doc.getElementById("myContBody");
  46. return !cntBody.classList.contains("noList");
  47. }
  48.  
  49. // タイトルの横へ挿入
  50. function insertLink() {
  51. var span = document.createElement('span');
  52. span.style.cssText = 'font-size:small; margin-top:4px; line-height:1.25;';
  53. span.innerHTML = ' <a href="http://www.nicovideo.jp/user/' + videoUserId + '/video">公開投稿動画</a>';
  54. videoTitle.appendChild(span); // insert position
  55. }
  56.  
  57. function createDocumentFromString(source) {
  58. var doc;
  59. try {
  60. doc = document.cloneNode(false);
  61. doc.appendChild(doc.importNode(document.documentElement, false));
  62. } catch(e) {
  63. doc = document.implementation.createHTMLDocument ?
  64. document.implementation.createHTMLDocument('hogehoge') :
  65. document.implementation.createDocument(null, 'html', null);
  66. }
  67. var range = document.createRange();
  68. range.selectNodeContents(document.documentElement);
  69. var fragment = range.createContextualFragment(source);
  70. var headChildNames = {title: true, meta: true, link: true, script: true, style: true, /*object: true,*/ base: true/*, isindex: true,*/};
  71. var child, head = doc.getElementsByTagName('head')[0] || doc.createElement('head'),
  72. body = doc.getElementsByTagName('body')[0] || doc.createElement('body');
  73. while ((child = fragment.firstChild)) {
  74. if (
  75. (child.nodeType === doc.ELEMENT_NODE && !(child.nodeName.toLowerCase() in headChildNames)) ||
  76. (child.nodeType === doc.TEXT_NODE && /\S/.test(child.nodeValue))
  77. )
  78. break;
  79. head.appendChild(child);
  80. }
  81. body.appendChild(fragment);
  82. doc.documentElement.appendChild(head);
  83. doc.documentElement.appendChild(body);
  84. return doc;
  85. }
  86. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址