Esempio n. 1
0
function fetch_tweets_from_solr($opts, $more = array())
{
    $defaults = array('include_epilogue' => 1);
    $more = array_merge($defaults, $more);
    $date_range = "[ {$opts['year']}-01-01T00:00:00Z TO {$opts['year']}-12-31T23:59:59Z ]";
    $parts = array("created_at" => $date_range, "favorited" => "false");
    if ($user = $opts['username']) {
        $parts['username'] = $user;
    }
    $tweets = array();
    $page = 1;
    $per_page = 1000;
    $page_count = null;
    while (!isset($page_count) || $page <= $page_count) {
        $query = array();
        foreach ($parts as $k => $v) {
            $query[] = "{$k}:{$v}";
        }
        if ($opts['exclude-retweets']) {
            $query[] = 'retweeted:false';
            $query[] = '-text:RT*';
        }
        if ($opts['exclude-replies']) {
            $query[] = '-reply_to_tweet_id:*';
        }
        $params = array('q' => implode(" AND ", $query), 'sort' => 'created_at asc');
        $_more = array('solr_endpoint' => $opts['solr'], 'per_page' => $per_page, 'page' => $page);
        $rsp = solr_select($params, $_more);
        if (!$rsp['ok']) {
            break;
        }
        if (!isset($page_count)) {
            $page_count = $rsp['pagination']['page_count'];
        }
        $tweets = array_merge($tweets, $rsp['rows']);
        $page += 1;
    }
    if ($more['include_epilogue']) {
        $next_year = $opts['year'] + 1;
        $date_range = "[ {$next_year}-01-01T00:00:00Z TO * ]";
        $parts['created_at'] = $date_range;
        $query = array();
        foreach ($parts as $k => $v) {
            $query[] = "{$k}:{$v}";
        }
        $params = array('q' => implode(" AND ", $query), 'sort' => 'created_at asc');
        $_more = array('solr_endpoint' => $opts['solr'], 'per_page' => 1, 'page' => 1);
        $rsp = solr_select($params, $_more);
        if ($rsp['ok'] && count($rsp['rows'])) {
            $tweets = array_merge($tweets, $rsp['rows']);
        }
    }
    return $tweets;
}
Esempio n. 2
0
function solr_select_nearby($lat, $lon, $params = array(), $more = array())
{
    $defaults = array("d" => 1, "sfield" => "location", "sort" => "geodist() asc");
    $more = array_merge($defaults, $more);
    if (!isset($params['q'])) {
        $query = array("*" => "*");
        $q = solr_utils_hash2query($query, " AND ");
        $params['q'] = $q;
    }
    $params['fq'] = "{!geofilt}";
    $params['pt'] = "{$lat},{$lon}";
    $params['sfield'] = $more['sfield'];
    $params['d'] = $more['d'];
    $params['sort'] = $more['sort'];
    return solr_select($params, $more);
}
function flickr_photos_search(&$query, $more = array())
{
    if (!$GLOBALS['cfg']['enable_feature_solr']) {
        return not_okay('search indexing is disabled');
    }
    # OMGWTF: When sorting by date_taken|posted the results
    # are basically anything but sorted. It's unclear to me
    # whether this is a known Lucene thing or ... what? I
    # suppose it might make sense to store dates as INTs but
    # then we lose the ability to do date facteing, for calendar
    # pages sometime in the future. So for now we'll just sort
    # by photo ID since it accomplishes the same thing...
    # (20111121/straup)
    #
    # see also: http://phatness.com/2009/11/sorting-by-date-with-solr/
    $defaults = array('viewer_id' => 0, 'sort' => 'id desc');
    $more = array_merge($defaults, $more);
    $q = solr_utils_hash2query($query, " AND ");
    $params = array('q' => $q, 'sort' => $more['sort']);
    $owner_id = isset($query['user_id']) ? $query['user_id'] : 0;
    if ($fq = _flickr_photos_search_perms_fq($owner_id, $more['viewer_id'], $more)) {
        $params['fq'] = $fq;
    }
    $rsp = solr_select($params, $more);
    if (!$rsp['ok']) {
        return $rsp;
    }
    $photos = array();
    foreach ($rsp['rows'] as $row) {
        $photo = flickr_photos_get_by_id($row['id']);
        $can_view_geo = $photo['hasgeo'] && flickr_geo_permissions_can_view_photo($photo, $more['viewer_id']) ? 1 : 0;
        $photo['can_view_geo'] = $can_view_geo;
        $photos[] = $photo;
    }
    $rsp['rows'] = $photos;
    return $rsp;
}