def get_3rd_party_campaign_phones(camp_info_today):
        running_3rd_camp_phones, running_3rd_camp_ids = set(), Utils.get_running_3rd_party_campaign_ids(camp_info_today)

        for run_id in running_3rd_camp_ids:
            camp_file = Utils.get_raw_campaign_file(config.CAMPAIGN_DIR, run_id)
            running_3rd_camp_phones.update(helper.read_phones_file(camp_file))
        return running_3rd_camp_phones
    def _generate_filtered_3rd_party_campaign_source(self, cid, given_date, directory=config.CAMPAIGN_DIR):
        output_directory = os.path.join(directory, "id{id_num}/{current_day}".format(id_num=cid, current_day=given_date))
        Utils.mkdirs_if_not_exist(output_directory)
        output_file = output_directory + "/" + "id{id_num}.filtered.csv".format(id_num=cid)

        filtered_phones = helper.read_phones_file(Utils.get_raw_campaign_file(config.CAMPAIGN_DIR, cid))

        if time.strftime("%Y%m%d") == given_date:
            self._logger.info("[stats]campaign id{0} has {1} base subs, {2} eligible subs".format(cid, len(filtered_phones), len(filtered_phones)))

        Utils.write_to_file(filtered_phones, output_file)
        return output_file