RSS Pipesã¯ã€JavaScriptã§ãƒ•ィルターを書ãã€RSSアグリゲーターã§ã™ã€‚
RSSã®ç™»éŒ²æ•°ãŒå¢—ãˆã¦ããŸã‚‰æ¤œç´¢æ©Ÿèƒ½ã‚’作ã‚ã†ã¨æ€ã£ã¦ã„ãŸã®ã§ã™ãŒã€
å…ˆã«ä½œã£ã¦ã—ã¾ã„ã¾ã—ãŸã€‚検索ã¨è¨€ã£ã¦ã‚‚ã€è¡¨ç¤ºã•れã¦ã„ã‚‹ã‚‚ã®ã‚’絞り込むã ã‘ã§ã™ã€‚
AngularJSã«ã¯æ¨™æº–ã§ãƒ•ィルターã¨ã„ã†ã‚‚ã®ãŒçµ„ã¿è¾¼ã¾ã‚Œã¦ã„ã‚‹ã®ã§éžå¸¸ã«ç°¡å˜ã«ã§ãã¾ã—ãŸã€‚ã‚½ãƒ¼ã‚¹ã‚³ãƒ¼ãƒ‰ã«æ¤œç´¢ãƒœãƒƒã‚¯ã‚¹é…ç½®ã®1行ã¨ã€ãƒ•ィルター追記ã®1è¡Œã§æ¸ˆã‚“ã§ã—ã¾ã„ã¾ã—ãŸã€‚Bootstrapã®ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã§ã‚‚ã†æ•°è¡Œã„ã˜ã‚Šã¾ã—ãŸãŒã€ãƒˆãƒ¼ã‚¿ãƒ«ã§5è¡Œã®æ”¹å¤‰ã®ã¿ã§ã™ã€‚
興味ã‚ã‚‹æ–¹ã¯ã€diffを見ã¦ã¿ã¦ãã ã•ã„。
https://github.com/dai-shi/rss-pipes/commit/c250c8a7d9b03476503c78fda5a2f0ab5cef5894#views/partials/home.jade
ãŠæ‰‹è»½ã§ã™ã€‚詳ã—ãã¯ã€AngularJSã®ãƒãƒ¥ãƒ¼ãƒˆãƒªã‚¢ãƒ«ã‚’å‚ç…§ã—ã¾ã—ょã†ã€‚
http://docs.angularjs.org/tutorial/step_03
RSS Pipesã¯ã€JavaScriptã§ãƒ•ィルターを書ãã€RSSアグリゲーターã§ã™ã€‚
フィルターJavaScriptã¯ãƒ–ラウザ上ã§èª°ã§ã‚‚書ãã“ã¨ãŒã§ãã¾ã™ã€‚ã™ãªã‚ã¡ã€ãƒã‚°å…¥ã‚Šã®ã‚³ãƒ¼ãƒ‰ã‚„ã€æ‚ªæ„ã®ã‚るコードも書ãã“ã¨ãŒã§ãã¾ã™ã€‚
ãã®ã‚ˆã†ãªä¸æ£ãªã‚³ãƒ¼ãƒ‰ã«ã©ã†å¯¾å‡¦ã™ã‚‹ã‹ãŒãƒã‚¤ãƒ³ãƒˆã«ãªã‚Šã¾ã™ã€‚
RSS Pipesã¯Node.jsã§å‹•ã„ã¦ã„ã¾ã™ã€‚Node.jsã«ã¯vmã¨ã„ã†ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒã‚ã£ã¦ã€ã‚µãƒ³ãƒ‰ãƒœãƒƒã‚¯ã‚¹ç’°å¢ƒã‚’作るã“ã¨ãŒã§ãã¾ã™ã€‚
Node.jsを使ã£ãŸã“ã¨ãŒã‚ã‚‹æ–¹ã¯åˆ†ã‹ã‚‹ã¨æ€ã„ã¾ã™ãŒã€ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’書ã„ã¦requireã™ã‚‹ã¨exportsã—ãŸã‚‚ã®ä»¥å¤–ã¯åå‰ãŒè¡çªã—ã¾ã›ã‚“。
ã“れã¯requireã§ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’ãƒãƒ¼ãƒ‰ã™ã‚‹æ™‚ã«ã‚µãƒ³ãƒ‰ãƒœãƒƒã‚¯ã‚¹ç’°å¢ƒã§è©•価ã—ã¦ã„ã‚‹ã‹ã‚‰ã§ã™ã€‚
RSS Pipesã§ã‚‚ã“ã®ä»•組ã¿ã‚’使ã£ã¦JavaScriptã®ã‚³ãƒ¼ãƒ‰ã‚’評価ã—ã¦ã„ã¾ã™ã€‚
よã£ã¦ã€ãƒ–ラウザ上ã‹ã‚‰å…¥åŠ›ã•れãŸJavaScriptコードã«ã‚ˆã£ã¦ã€ã‚µãƒ¼ãƒå´ã®Node.jsã«ã‚¢ã‚¯ã‚»ã‚¹ã•れるã“ã¨ã¯ã‚りã¾ã›ã‚“。
ã¨ã“ã‚ãŒã€vmモジュールã®ãƒžãƒ‹ãƒ¥ã‚¢ãƒ«ã‚’よãèªã‚€ã¨æ›¸ã„ã¦ã‚るよã†ã«ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’使ã†ã“ã¨ã§å®‰å…¨ã«ãªã‚‹ã‚ã‘ã§ã¯ã‚りã¾ã›ã‚“。安全ã«ã‚³ãƒ¼ãƒ‰ã‚’走らã›ã‚‹ãŸã‚ã«ã¯ã‚µãƒ–プãƒã‚»ã‚¹ã‚’使ã†ã‚ˆã†ã«ã€ã¨æ›¸ã„ã¦ã‚りã¾ã™ã€‚
ã©ã†ã„ã†ã“ã¨ã‹ã¨è¨€ã†ã¨ã€Node.jsã¯ã‚·ãƒ³ã‚°ãƒ«ã‚¹ãƒ¬ãƒƒãƒ‰ã§å‹•作ã™ã‚‹ãŸã‚ã€vmã§ã‚µãƒ³ãƒ‰ãƒœãƒƒã‚¯ã‚¹ç’°å¢ƒã‚’作ã£ãŸã¨ã—ã¦ã‚‚ãã“ã§ä½¿ç”¨ã•れるリソース(CPUパワーやメモリ)を制é™ã™ã‚‹ã“ã¨ã¯ã§ããšã€ãƒªã‚½ãƒ¼ã‚¹ã‚’ä¸ç”¨æ„ã«ä½¿ã‚れã¦ã—ã¾ã†å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ç°¡å˜ãªä¾‹ã§ã¯ã€
while(true) {}
ã¨ã„ã†JavaScriptを走らã›ã‚‹ã¨Node.js全体ãŒå›ºã¾ã£ã¦ã—ã¾ã„ã¾ã™ã€‚
ã¨ã¯è¨€ã£ã¦ã‚‚ã€herokuã§å‹•ã„ã¦ã„ã‚‹RSS Pipesã§ã‚µãƒ–プãƒã‚»ã‚¹ã‚’使ã†ã‚ã‘ã«ã¯ã„ãã¾ã›ã‚“。(もã—ã‹ã—ã¦ã€ä½¿ã†ã“ã¨è‡ªä½“ã¯ã§ãã‚‹ã®ã‹ã‚‚?)
ãã“ã§ã€ç„¡é™ãƒ«ãƒ¼ãƒ—を判定ã™ã‚‹ã‚ˆã†ãªä»•組ã¿ã‚’ã„れã¦ã„ã¾ã™ã€‚
å…ˆã»ã©ã®ä¾‹ã§ã¯ã€
while(true) {
counter++;
}
ã®ã‚ˆã†ã«ã—ã¦ã€counter
ãŒä¸€å®šå€¤ã‚’è¶ŠãˆãŸå ´åˆã«å¼·åˆ¶çš„ã«æ¢ã‚れã°ã‚ˆã„ã®ã§ã™ã€‚ã“れã§ã€ã©ã®ç¨‹åº¦ã®å±é™ºãŒå›žé¿ã§ããŸã‹ã¯å®šã‹ã§ã¯ã‚りã¾ã›ã‚“。æ£ç¢ºã«CPUã®ä½¿ç”¨çŽ‡ã‚’æ¸¬ã£ã¦ã„ã‚‹ã‚ã‘ã§ã‚‚ã‚りã¾ã›ã‚“ã—ã€ãƒ¡ãƒ¢ãƒªã«ã¤ã„ã¦ã¯ãƒŽãƒ¼ã‚¿ãƒƒãƒã§ã™ã€‚ãれã§ã‚‚ã€ç„¡é™ãƒ«ãƒ¼ãƒ—ã§å›ºã¾ã‚‹ã“ã¨ã¯å›žé¿ã§ãã¦ã„ã‚‹ã®ã§ã€å°‘ãªãã¨ã‚‚悪æ„ã®ãªã„コードã§ã—ãŸã‚‰ã€å•題ã®ãªã„ç¯„å›²ã¨æ€ã£ã¦ã„ã¾ã™ã€‚
å°†æ¥çš„ã«ã€vmモジュールã®ã‚µãƒ³ãƒ‰ãƒœãƒƒã‚¯ã‚¹ç’°å¢ƒã§ãƒªã‚½ãƒ¼ã‚¹åˆ¶é™ã¾ã§ã—ã¦ãれるよã†ã«ã¯ãªã‚‰ãªã„ã§ã—ょã†ã‹ã。ã¡ã‚‡ã£ã¨èˆˆå‘³ã‚りã¾ã™ã€‚
ã¾ã 誰ã«ã‚‚使ã‚れã¦ã„ãªã„RSS Pipesã§ã™ãŒã€æ©Ÿèƒ½ã‚’è¿½åŠ ã—ã¾ã—ãŸã€‚
RSS Pipesã¯RSSã®ã‚¢ã‚°ãƒªã‚²ãƒ¼ã‚¿ãƒ¼ã§ãƒ•ィルターをJavaScriptã§ç·¨é›†ã—ã¾ã™ã€‚編集ã¯Webブラウザ上ã§è¡Œã†ã®ã§ã€ã„ã‚ゆるWikiã®ã‚ˆã†ãªã‚·ã‚¹ãƒ†ãƒ ã§ã™ã€‚
誰ã§ã‚‚編集ã§ãã¦ã—ã¾ã†ã®ã§ã€ãã®ã†ã¡SPAM行為をã™ã‚‹åˆ©ç”¨è€…ã‚‚ã§ã¦ãã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“。ã¾ã‚ã€ãã†ãªã‚‹ãらã„ã«ãªã£ãŸã‚‰ã†ã‚Œã—ã„ã‚ã‘ã§ã™ãŒã€‚
SPAM行為をã•れã¦ã‹ã‚‰å¯¾ç–ã™ã‚Œã°ã‚ˆã„ã¨æ€ã£ã¦ã„ãŸã§ã™ãŒã€SPAM対ç–ãŒã•れã¦ã„ãªã„ã“ã¨ã§ã€åˆ©ç”¨è€…ãŒèºŠèº‡ã—ã¦ã—ã¾ã†ã®ã¯æœ¬æœ›ã§ã¯ã‚りã¾ã›ã‚“。ãã“ã§ã€ç°¡å˜ãªãƒãƒƒã‚¯æ©Ÿèƒ½ã‚’作りã¾ã—ãŸã€‚
編集ã™ã‚‹ã¨ãã«ãƒãƒƒã‚¯ã‚³ãƒ¼ãƒ‰ã‚’入力ã™ã‚‹ã¨ã€ä»¥é™ãã®ãƒãƒƒã‚¯ã‚³ãƒ¼ãƒ‰ã‚’入力ã—ãªã„ã¨æ›´æ–°ã§ããªããªã‚Šã¾ã™ã€‚ã‚‚ã¡ã‚ã‚“ã€ãƒãƒƒã‚¯ã‚³ãƒ¼ãƒ‰ã‚’忘れãŸã‚‰ã€æœ¬äººã§ã‚‚æ›´æ–°ã§ããªããªã‚Šã¾ã™ã€‚ãã†ã„ã†ã¨ãã¯ã€ã‚ãらã‚ã¦æ–°ã—ã„フィルターã¨ã—ã¦å†ç™»éŒ²ã—ã¾ã—ょã†ã€‚「複製ã€ãƒœã‚¿ãƒ³ãŒã‚ã‚‹ã®ã§ã€ç°¡å˜ã§ã™ã€‚
http://dai-shi.github.io/rss-pipes/
昨日ã€è¦‹ã¤ã‘ã¦issueã®ç™»éŒ²ã‚’ã—ã¦ãŠã„ãŸã€connect-offlineã®ä»¶ã§ã™ã€‚
https://github.com/dustMason/connect-offline/issues/1
æ—©é€Ÿè¿”äº‹ãŒæ¥ã¾ã—ãŸã€Pull Requestã«ã—ã¦æ¬²ã—ã„ã¨ã€‚仕方ãªã„ã‚„ã‚‹ã‹ãªã€ã¨æ€ã£ã¦ã¿ãŸã‚‚ã®ã®ã€ã‚„ã£ã±ã‚ŠCoffeeScriptã§ã¯æ›¸ãæ°—ã«ãªã‚Œã¾ã›ã‚“。ã¾ãŸã€ãƒ‘ッケージåも分ã‹ã‚Šã«ãã„ã®ã§ã¯ãªã„ã®ã‹ã¨è€ƒãˆã€æ–°ã—ã作るã“ã¨ã«ã—ã¾ã—ãŸã€‚
åˆã‚ã¯ã€å®Œå…¨äº’æ›ã®ãƒ‘ッケージã«ã—よã†ã¨è€ƒãˆã¦ã„ãŸã®ã§ã™ãŒã€process.cwd()
ã§ç›¸å¯¾ãƒ‘スを使ã£ã¦ã„ã‚‹ã®ãŒæ°—ã«å…¥ã‚‰ãšã€__dirname
を使ã†ã‚ˆã†ã«ã—ãŸã‹ã£ãŸã®ã§ã€ãƒ‘ã‚¹ã®æŒ‡å®šã®äº’æ›æ€§ãŒãªããªã£ã¦ã—ã¾ã„ã¾ã—ãŸã€‚
作ã£ã¦ã„ã‚‹ã†ã¡ã«ä»–ã®æ”¹å–„案(ディレクトリã®å†å¸°æŽ¢ç´¢ï¼‰ã‚‚æ€ã„ã¤ãã€å®Ÿè£…方法もã ã„ã¶å¤‰ã‚ã£ã¦ã—ã¾ã£ãŸã®ã§ã€äº’æ›ã®æ–¹å‘性ã¯ã‚„ã‚ã¾ã—ãŸã€‚ã¨ã¯è¨€ã£ã¦ã‚‚ã€åŸºæœ¬çš„ã«ã¯åŒã˜ã‚ˆã†ã«ä½¿ãˆã‚‹ã¯ãšã§ã™ã€‚
https://github.com/dai-shi/connect-cache-manifest
ã‹ã‚‰å‚ç…§ã§ãã¾ã™ã€‚npmã«ã‚‚登録済ã¿ã§ã™ã€‚
express.jsã§HTML5ã®ã‚ャッシュマニフェストを使ãŠã†è€ƒãˆã¦ã„ã¾ã™ã€‚ã©ã†ã›ãªã‚‰connectã®middlewareã«ã—ãŸã‚‰ä¾¿åˆ©ã ã‚ã†ã¨æ€ã£ã¦èª¿ã¹ã¾ã—ãŸã€‚
GitHubã§manifestã‚’ã‚ーワードã«è‰²ã€…検索ã—ãŸã®ã§ã™ãŒã€è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚connect-manifestã¨ã„ã†ç©ºã®ãƒ—ãƒã‚¸ã‚§ã‚¯ãƒˆãŒã‚ã£ãŸãらã„。
ã‚ãらã‚ã¦ã€è‡ªåˆ†ã§ä½œã‚ã†ã‹ã¨æ€ã£ãŸã¨ã“ã‚ã§ã€npmã§æ¤œç´¢ã—ã¦ã¿ã¾ã—ãŸã€‚çµæžœã€è¦‹ã¤ã‘ã¾ã—ãŸã€‚
https://github.com/dustMason/connect-offline
offlineã¨ã„ã†åå‰ã ã‹ã‚‰ã€GitHubã®æ¤œç´¢ã§ã¯è¦‹ã¤ã‹ã‚‰ãªã‹ã£ãŸã‚ˆã†ã§ã™ã€‚
Node.jsã¯ãƒ‘ッケージ探ã—ãŒé›£ã—ã„ã§ã™ã。
ã“ã®connect-offlineã¯Staræ•°ãŒ4ã—ã‹ã‚りã¾ã›ã‚“。ã‚ã¾ã‚Šã€ã‚ャッシュマニフェストをmiddlewareã§æ¬²ã—ã„ã¨æ€ã†äººã¯ã„ãªã„ã®ã§ã—ょã†ã‹ã€‚ãれã¨ã‚‚ã€åå‰ãŒæ‚ªãã¦ã¿ã‚“ãªè¦‹ã¤ã‘られãªã„ã®ã§ã—ょã†ã‹ã€‚
READMEã‚’èªã‚€ã¨ã€ä»¥å‰ã®connectã«ã¯cacheManifestã¨ã„ã†middlewareãŒãƒãƒ³ãƒ‰ãƒ«ã•れã¦ã„ãŸã‚ˆã†ã§ã™ã€‚connectã®ãƒªãƒã‚¸ãƒˆãƒªã‚’探りã¾ã—ãŸãŒã€ç¢ºã‹ã«ã€version 1.0よりå‰ã®ã‚¿ã‚°ã«ã¯å˜åœ¨ã—ã¾ã™ã€‚ãªãœã€ã‚„ã‚ãŸã®ã‹ã¯åˆ†ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚(消ãˆãŸãƒ•ァイルã®git logを見れã°ã„ã„ã®ã‚‚)
ã•ã¦ã€connect-offlineã¯ã¡ã‚‡ã£ã¨æƒ³åƒã—ã¦ã„ãŸæ©Ÿèƒ½ãŒè¶³ã‚Šãªã‹ã£ãŸã®ã§ã€è‡ªåˆ†ã§ä¿®æ£ã—よã†ã¨æ€ã£ãŸã®ã§ã™ãŒã€ã‚½ãƒ¼ã‚¹ãŒCoffeeScriptã ã£ãŸã®ã§æ‰‹ã‚’出ã—ã¾ã›ã‚“ã§ã—ãŸã€‚(CoffeeScriptã¯ãªãœã‹å¥½ãã«ãªã‚Œãªã„ã®ã§ï¼‰
代ã‚りã«ã€issueã«ã—ã¦ãŠãã¾ã—ãŸã€‚
https://github.com/dustMason/connect-offline/issues/1
RSS Pipesを使ã£ã¦JavaScriptã®å‹‰å¼·ã‚’ã—よã†ã€ã®ç¬¬ä¸‰å¼¾ã§ã™ã€‚
昨日ã€ã¯ã¦ãªãƒ–ックマーク新ç€ã‚¨ãƒ³ãƒˆãƒªã‹ã‚‰ã‚ーワードã§ãƒ•ィルタリングã™ã‚‹RSS Pipesã®ä¾‹ã‚’紹介ã—ã¾ã—ãŸãŒã€ã¯ã¦ãªãƒ–ックマークã®å ´åˆã¯ã¯ã¦ãªãŒæä¾›ã™ã‚‹RSSã§ã‚ーワードフィルタリングã§ãã¦ã—ã¾ã„ã¾ã™ã€‚
ãã“ã§ä»Šæ—¥ã¯ã€ã‚ーワードãŒå«ã¾ã‚Œã¦ã„ãŸå ´åˆã‚¿ã‚¤ãƒˆãƒ«ã‚’æ›¸ãæ›ãˆã‚‹æ–¹æ³•を例題ã«ã—ã¾ã™ã€‚
フィードをæµã—èªã¿ã™ã‚‹ã¨ãã¯ã€ã‚¿ã‚¤ãƒˆãƒ«ã«æ°—ã«ãªã‚‹ã‚ーワードãŒå…¥ã£ã¦ã„ã‚‹ã¨ç›®ã«ç•™ã¾ã‚Šã¾ã›ã‚“ã‹ã€‚自然ã¨ç›®ã§ã‚ーワードフィルタリングã—ã¦ã„ã‚‹ã®ã‹ã‚‚ã—れã¾ã›ã‚“。ãã“ã§ã€ãれを助ã‘ã‚‹ãŸã‚ã«ã‚¿ã‚¤ãƒˆãƒ«ã‚’強調表示ã—ã¦ã¿ã¾ã—ょã†ã€‚★マークをã¤ã‘ã‚‹ã®ã¯ã©ã†ã§ã—ょã†ã‹ã€‚
次ã®ã‚ˆã†ãªJavaScriptコードã«ãªã‚Šã¾ã™ã€‚
function rssPipesFilterFunction(articles) {
var keywords = ["JavaScript", "javascript"];
var i, len = keywords.length;
articles.forEach(function(article) {
if (article.title) {
for (i = 0; i < len; i++) {
if (article.title.indexOf(keywords[i]) >= 0) {
article.title = "★★★ " + article.title;
break;
}
}
}
});
return articles;
}
å‰å›žã¨åŒã˜ã‚ˆã†ã«ã€indexOfã§ã‚ーワードを探ã—ã¦ã€è¦‹ã¤ã‹ã£ãŸå ´åˆã¯article.titleã«æ–‡å—åˆ—ã‚’è¿½åŠ ã—ã¦ã„ã¾ã™ã€‚
RSS Pipesã§å‹•ãサンプルã¯ã“ã¡ã‚‰ã§ã™ã€‚
RSS Pipes: hatena/JavaScript関連ã®ãƒ–ックマーク/タイトル強調表示
ã‚‚ã†ã€ãƒã‚¿ãŒãªããªã£ã¦ããŸã‹ã‚‚。
RSS Pipesã¯JavaScriptã§ãƒ•ィルターを書ãRSSアグリゲーターã§ã™ã€‚
æ—¢ã«å˜åœ¨ã™ã‚‹ã‚¢ã‚¤ãƒ†ãƒ をコピーã—ã¦æ–°ã—ã登録ã™ã‚‹ã€Œè¤‡è£½ã€æ©Ÿèƒ½ãŒæ¬²ã—ã„ã¨æ€ã£ã¦å®Ÿè£…方法を考ãˆã¦ã„ãŸã®ã§ã™ãŒã€æ€ã„ã®ã»ã‹ç°¡å˜ã«ã§ãã¾ã—ãŸã€‚
備忘メモã—ã¦ãŠãã¾ã™ã€‚
$routeProviderã®ã‚³ãƒ¼ãƒ‰ã¯ã€
$routeProvider.when('/home', {...});
$routeProvider.when('/edit', {...});
ã®ã‚ˆã†ã«ãªã£ã¦ã„ã¾ã™ã€‚/homeã«è¤‡è£½ãƒœã‚¿ãƒ³ãŒã‚りã€ãれを押ã™ã¨/editã«é·ç§»ã—ã¾ã™ã€‚ã¤ã¾ã‚Šã€/homeã‹ã‚‰/editã«è¤‡è£½å…ƒã®ãƒ‡ãƒ¼ã‚¿ã‚’渡ã—ãŸã„ã¨ã„ã†ã“ã¨ã§ã™ã€‚
$rootScopeを使ã„ã¾ã—ãŸã€‚
$rootScope.saved = {};
ã¨ã—ã¦ãŠã„ã¦ã€/homeã®ã‚³ãƒ³ãƒˆãƒãƒ¼ãƒ©ã§ã€
$scope.saved.data = data;
ã¨ã—ã¦ä¿å˜ã—ã€/editã®ã‚³ãƒ³ãƒˆãƒãƒ¼ãƒ©ã§ã€
$scope.data = $scope.saved.data;
ã¨ã—ã¦å¾©å…ƒã—ã¾ã™ã€‚å ´åˆã«ã‚ˆã‚Šã¾ã™ãŒã€ä»Šå›žã¯æ¶ˆã—ãŸã‹ã£ãŸã®ã§ã€ã•らã«ã€
delete $scope.saved.data;
ã¨ã—ã¾ã—ãŸã€‚
ã‚‚ã£ã¨ã‚¹ãƒžãƒ¼ãƒˆãªæ–¹æ³•ãŒã‚ã‚‹ã®ã‹ã‚‚ã—れã¾ã›ã‚“ãŒã€ä»Šå›žã¯ã“れã§ã‚ˆã—ã¨ã—ã¾ã™ã€‚
RSS Pipesを使ã£ã¦JavaScriptã®å‹‰å¼·ã‚’ã—よã†ã€ã®ç¬¬äºŒå¼¾ã§ã™ã€‚ã“れã€é€£è¼‰ã«ã§ãã‚‹ã‹ã—ら。
フィードをæµã—èªã¿ã™ã‚‹ã¨ãã¯ã€ã‚¿ã‚¤ãƒˆãƒ«ã«æ°—ã«ãªã‚‹ã‚ーワードãŒå…¥ã£ã¦ã„ã‚‹ã‹ãŒé‡è¦ã ã¨æ€ã„ã¾ã™ã€‚ã‚ーワードã§ãƒ•ィルタリングã™ã‚‹ã¨ã„ã†ã®ã¯ã‚りãŒã¡ã§ã™ã。
次ã®ã‚ˆã†ãªJavaScriptコードã«ãªã‚Šã¾ã™ã€‚
function rssPipesFilterFunction(articles) {
var keywords = ["JavaScript", "javascript"];
var i, len = keywords.length;
var newArticles = [];
articles.forEach(function(article) {
if (article.title) {
for (i = 0; i < len; i++) {
if (article.title.indexOf(keywords[i]) >= 0) {
newArticles.push(article);
break;
}
}
}
});
return newArticles;
}
ã‚ーワードãŒä¸€ã¤ã§ã‚‚見ã¤ã‹ã£ãŸã‚‰ã€breakã§forループを抜ã‘ã¦æ¬¡ã«é€²ã‚€ã¨ã“ã‚ãŒãƒã‚¤ãƒ³ãƒˆã§ã™ã€‚Array.forEachを使ã†ã¨ã€i
ã¨len
ã®å¤‰æ•°ãŒä¸è¦ã«ãªã‚‹ã®ã§ã™ãŒã€ãã®å ´åˆJavaScriptã ã¨ãƒ«ãƒ¼ãƒ—を抜ã‘出ã›ãªã„ã®ã§ã™ã€‚
今回ã¯indexOfã§æ›¸ã„ã¦ã¿ã¾ã—ãŸãŒã€ã“ã“ã‚’æ£è¦è¡¨ç¾ã§ãƒžãƒƒãƒã•ã›ã‚‹æ–¹æ³•ã‚‚ã‚りã¾ã™ã€‚今回ã®ä¾‹ã ã¨ã€/javascript/i
ã¨ã„ã†ç°¡å˜ãªæ£è¦è¡¨ç¾ã§æ›¸ã‘ã‚‹ã®ã§ã€ãã®ã»ã†ãŒä¸€èˆ¬çš„ã‹ã‚‚ã—れã¾ã›ã‚“。æ£è¦è¡¨ç¾ã‚’ä½¿ã†æ™‚ã¯ãƒ«ãƒ¼ãƒ—ã®å¤–å´ã§äº‹å‰ã«å®šç¾©ã—ã¦precompileã™ã‚‹ã‚ˆã†ã«ã—ã¾ã—ょã†ã€‚
article.titleã ã‘ã§ã¯ãªãã€article.descriptionã‚‚ãƒã‚§ãƒƒã‚¯ã™ã‚‹ã¨ã‚¿ã‚¤ãƒˆãƒ«ã§ã¯ãªãdescriptionã«ã‚ーワードãŒå«ã¾ã‚Œã¦ã„ã‚‹ã‹ã‚‚ãƒã‚§ãƒƒã‚¯ã§ãã¾ã™ã€‚今回ã¯ã€ã‚¿ã‚¤ãƒˆãƒ«ã ã‘ã«ã¨ã©ã‚ã¾ã—ãŸã€‚
実際ã“れをRSS Pipesã§é©ç”¨ã—ãŸä¾‹ãŒã€ä¸‹è¨˜ã«ã‚りã¾ã™ã€‚
RSS Pipes: hatena/JavaScript関連ã®ãƒ–ックマーク
ã“ã®ä¾‹ã¯ã¯ã¦ãªãƒ–ãƒƒã‚¯ãƒžãƒ¼ã‚¯ã®æ–°ç€ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã‚’使ã„ã¾ã—ãŸãŒã€ã¯ã¦ãªãƒ–ックマークを使ã†ã ã‘ãªã‚‰ã¯ã¦ãªãŒæä¾›ã™ã‚‹RSSã§å¯¾å¿œã§ãã¾ã—ãŸã。
http://b.hatena.ne.jp/keyword/JavaScript?mode=rss
ã¤ã¥ã。ã‹ãªï¼Ÿï¼Ÿ
RSSを処ç†ã™ã‚‹ã¨è¨€ãˆã°ã€ã¾ãšã¯åºƒå‘Šã‚¨ãƒ³ãƒˆãƒªã®é™¤åŽ»ã§ã—ょã†ã‹ã€‚
Yahoo! Pipesã®åˆ©ç”¨ä¾‹ã§ã‚‚よãã‚りãã†ã§ã™ã€‚
RSS Pipesã®å ´åˆã¯JavaScriptã§ãƒ•ィルターを書ãã¾ã™ã€‚
function rssPipesFilterFunction(articles) {
var newArticles = [];
articles.forEach(function(article) {
if (article.title && article.title.lastIndexOf('AD:', 0) != 0 &&
article.title.lastIndexOf('PR:', 0) != 0) {
newArticles.push(article);
}
});
return newArticles;
}
ã“ã®ã‚ˆã†ãªæ„Ÿã˜ã«ãªã‚Šã¾ã™ã€‚
AD,PRエントリを除去ã™ã‚‹ãƒ•ィルター #rsspipes
ã«ã‚‚åŒã˜ã‚‚ã®ã‚’ç½®ã„ã¦ã„ã¾ã™ã€‚
ä»Šã€æ€ã£ãŸã®ã§ã™ãŒã€ã“れã£ã¦JavaScriptã®å‹‰å¼·ã«çµæ§‹ä½¿ãˆã‚‹ã®ã§ã¯ãªã„ã§ã—ょã†ã‹ã€‚比較的çŸã„コードã§å®Ÿç”¨çš„ãªæ©Ÿèƒ½ãŒä½œã‚Œã‚‹ã®ã§ã€‚
実際ã“れをRSS Pipesã§é©ç”¨ã—ãŸä¾‹ãŒã€ä¸‹è¨˜ã«ã‚りã¾ã™ã€‚
RSS Pipes: news/itmedia&cnetjapan
ã“ã®ã‚³ãƒ¼ãƒ‰ã‚’コピペã™ã‚‹ã ã‘ã§ã€ä»–ã®RSSã®å‡¦ç†ã‚‚ã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚ã„ã‹ãŒã§ã—ょã†ã‹ã€‚
JQueryã‚„AngularJSã¯Google Hosted LibrariesãŒé…ä¿¡ã—ã¦ãれã¦ã€
Bootstrapã¯BootstrapCDNã¨ã„ã†ã®ã‚‚ã‚ã£ã¦
便利ã§ã™ã€‚
ã—ã‹ã—ã€ãƒžã‚¤ãƒŠãƒ¼ãªãƒ©ã‚¤ãƒ–ラリã«ãªã‚‹ã¨ã©ã†ã—ãŸã‚‚ã®ã‹ã¨æ€ã£ã¦ã„ã¾ã—ãŸã€‚手を入れãªã„ライブラリã¯è‡ªåˆ†ã§ãƒ›ã‚¹ãƒ†ã‚£ãƒ³ã‚°ã™ã‚‹ç†ç”±ã‚‚ãªã„ã®ã§ã€CDNãŒãªã„ã‹ãªã¨æ€ã£ã¦æŽ¢ã—ãŸã¨ã“ã‚ã€
を見ã¤ã‘ã¾ã—ãŸã€‚cdnjsã¯GitHubã®Pull Requestsã§ãƒ©ã‚¤ãƒ–ラリã®ç™»éŒ²ã‚’ä¾é ¼ã§ãã‚‹ã¨ã„ã†ã®ãŒé¢ç™½ã„ã§ã™ã€‚
ã—ã‹ã—ã€ã©ã¡ã‚‰ã‚‚cssファイルã¯ç™»éŒ²ã•れã¦ã„ãªã„様åãªã®ã§ã€çµå±€ã™ã¹ã¦ã‚’外部CDNã«é ¼ã‚‹ã“ã¨ã¯ã§ããªã„ã¨ã€‚探ã›ã°ä»–ã«ã‚‚ã‚りãã†ã§ã™ã。