npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

phantomstream

v0.0.1

Published

Streaming interface to the PhantomJS headless browser

Downloads

3

Readme

phantomstream

Write and automate PhantomJS scripts inside node, using a standard Stream interface.

Getting Started

First off, install the phantomstream module.

npm install phantomstream

Next, create a simple script named "myscript.js".

phantomstream = require("../phantomstream")

// Open up a PhantomJS stream that listens for commands that look like
// "TITLE <url>". Browse to the URL and write the title back via the stream.
var conf = {logger: console}
var ps = phantomstream.open(conf, function(nodestream, phantom, require, global) {

  // This callback executes inside of PhantomJS, not node.  To see the API
  // available to you in PhantomJS, check out their documentation:
  // http://code.google.com/p/phantomjs/wiki/Interface
  var page = require("webpage").create()

  // Listen for the "TITLE <url>" commands via the streaming interface.
  nodestream.on("data", function(data) {
    var matches = /TITLE\s*(.+)/.exec(data)
    if (matches) {
      var url = matches[1]

      // Got a TITLE command, use the PhantomJS page object to browse
      // to that page, get the document title, and write it back to the stream.
      console.info("opening", url)
      page.open(url, function() {
        var title = page.evaluate(function() {
          return document.title
        })
        console.info("sending title =", title)
        nodestream.write(title)
      })
    }
  })

})

// Send an TITLE command to our PhantomJS process and echo the response.
ps.write("TITLE http://www.google.com")
ps.on("data", function(data) {
  console.info("node received:", data.toString())
  process.exit()
})

Run your script with node.

node myscript.js

...you should see output like this:

[phantom-stdout] opening http://www.google.com
[phantom-stdout] sending title = Google
node received: Google

Enjoy! For more ideas on what is possible inside the callback for phantomstream.open(), read the PhantomJS documentation.

Don't forget try out some demos from the examples/ directory :)

Alternatives

If you are looking for higher-level implementations that wrap the PhantomJS API, check these out: